前一阵子,firelong说,应该用接口实现事件,而不应该用委托。我就希望他能给出一个用接口实现事件的方法,我是一直等呀,等到了现在也没有看到。
昨天又看到了,Snake@Net 说不要把接口和委托给混淆了的文章。也许我就把他们给混淆了吧。他的文章没仔细看,不过我倒是突然想到了一个用接口实现事件的方法,写了一个简单的demo测试了一下,居然还成功了。
所以拿出来抖落抖落。
这个只是体现了一个简单的思路,我并不想用他来证明什么,只是写着玩的。
==========================
建立两个项目,一个是web项目,一个是自定义服务器控件的项目。
服务器控件的项目里定义一个控件(EventTest)和一个接口(IEvent)。
代码如下
代码
namespace
Nature.MyEvent
{
/// <summary>
/// 定义一个接口
/// </summary>
public interface IEvent
{
string MyName
{
get ;
set ;
}
string Test
{
get ;
set ;
}
void Event(System.Web.UI.Page page);
}
}
{
/// <summary>
/// 定义一个接口
/// </summary>
public interface IEvent
{
string MyName
{
get ;
set ;
}
string Test
{
get ;
set ;
}
void Event(System.Web.UI.Page page);
}
}
代码
namespace
Nature.MyEvent
{
[DefaultProperty( " Text " )]
[ToolboxData( " <{0}:EventTest runat=server></{0}:EventTest> " )]
public class EventTest : WebControl, INamingContainer
{
TextBox txt = new TextBox();
HtmlInputButton btn = new HtmlInputButton();
private List < IEvent > _EventList = new List < IEvent > () ;
public List < IEvent > EventList
{
get { return _EventList; }
set { _EventList = value; }
}
protected override void CreateChildControls()
{
base .CreateChildControls();
// 创建一个文本框
txt.ID = " Txt_Test " ;
this .Controls.Add(txt);
{
[DefaultProperty( " Text " )]
[ToolboxData( " <{0}:EventTest runat=server></{0}:EventTest> " )]
public class EventTest : WebControl, INamingContainer
{
TextBox txt = new TextBox();
HtmlInputButton btn = new HtmlInputButton();
private List < IEvent > _EventList = new List < IEvent > () ;
public List < IEvent > EventList
{
get { return _EventList; }
set { _EventList = value; }
}
protected override void CreateChildControls()
{
base .CreateChildControls();
// 创建一个文本框
txt.ID = " Txt_Test " ;
this .Controls.Add(txt);