Esempio n. 1
0
    public static void Main()
    {
        #region 委托
        //1.普通委托
        var print1 = new Print(delegatemethod);
        print1("这是普通方式创建的委托");
        //2.匿名委托
        Print print2 = delegate(string str) {
            Console.WriteLine(str);
        };
        print2("这是匿名方式创建的委托");
        //3.lambda委托
        Print print3 = (string str) => {
            Console.WriteLine(str);
        };
        print3("这是lambda方式创建的委托");
        #endregion

        #region 事件
        SourceClass source = new SourceClass("我的事件被触发");
        source.Width  = 5.0;
        source.Height = 3.0;
        //一、委托方式允许source.Clicked(source, new My_EventArgs("我使用委托方式调用的Args"));调用
        source.Clicked  = new SourceClass.EventHandler(source_RightClick);
        source.Clicked += new SourceClass.EventHandler(source_LeftClick);
        source.ClickedAsync();
        source.Clicked(source, new My_EventArgs("我使用委托方式调用的Args"));
        //二、很明显用户希望通过使用source.ClickedAsync();去调用函数,而非直接使用上行代码去调用,所以在这里需要使用Event关键字进行申明
        //注1.事件方式不允许source.Clicked(source, new My_EventArgs("我使用委托方式调用的Args"));直接调用
        //注2.事件不允许 source.Click = new SourceClass.EventHandler(source_LeftClick);直接赋值
        source.Click += new SourceClass.EventHandler(source_LeftClick);
        source.ClickAsync();
        //注销事件和注册事件
        source.Click -= new SourceClass.EventHandler(source_LeftClick);
        source.Click += new SourceClass.EventHandler(source_RightClick);
        source.ClickAsync();
        Console.ReadLine();
        #endregion
    }