WEB开发网
开发学院软件开发C语言 换一个角度理解委托和事件 阅读

换一个角度理解委托和事件

 2010-10-01 08:20:13 来源:WEB开发网   
核心提示: 如果你是自己在试着写的话,估计你已经崩溃了(反正我是这样),换一个角度理解委托和事件(4),不好办呀,如果看这段代码没有感觉的话,你会做了么?而在winform和asp.net中,给事件对应的方法添加了两个参数并规范了命名,试着写一写,好了

如果你是自己在试着写的话,估计你已经崩溃了(反正我是这样),不好办呀。如果看这段代码没有感觉的话,试着写一写。

好了,看看微软是如何解决这个问题的吧。

    //先声明一个委托再说,目标是要能调用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#中的委托和事件

上一页  1 2 3 4 

Tags:一个 角度 理解

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接