换一个角度理解委托和事件
2010-10-01 08:20:13 来源:WEB开发网如果你是自己在试着写的话,估计你已经崩溃了(反正我是这样),不好办呀。如果看这段代码没有感觉的话,试着写一写。
好了,看看微软是如何解决这个问题的吧。
//先声明一个委托再说,目标是要能调用ForCustome类里的方法,所以注意方法签名
public delegate void myDelegate();
public class Button
{
//声明一个事件,和委托相关联
public event myDelegate ClickIt;
public void Click()
{
//可以想象,这个方法是一个封装了之前我们想要的一大段条件判断语句的“复合体”
ClickIt();
}
}
class Program
{
static void Main(string[] args)
{
ForCustome fc = new ForCustome();
//实例化一个button类
Button btn = new Button();
//这里,将按钮的事件和按钮事件对应的(将要触发的)方法相关联,相当于我们之前想象的注册
btn.ClickIt += new myDelegate(fc.Button_Click);
btn.Click();
//实例化第二个button
Button btn2 = new Button();
btn2.ClickIt+=new myDelegate(fc.Button2_Click);
btn2.Click(); //这样写能行么?
}
}
//这个类提供给用户的,没有变化
public class ForCustome
{
public void Button_Click()
{
//用户在这里写具体的方法实现
Console.WriteLine("被点击了!");
}
//添一个方法实现是必须的
public void Button2_Click()
{
Console.WriteLine("我是第二个被点击的按钮!");
}
}
大功告成!欣赏一下吧,相当优雅的一个架构。如果还要再添加一个按钮和对应的事件,你会做了么?
而在winform和asp.net中,给事件对应的方法添加了两个参数并规范了命名,就更完美了。
编辑推荐阅读:C#中的委托和事件
更多精彩
赞助商链接