C#: Delegate and Event

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test.Other
{
    public class TestDelegateAndEvent
    {
        public delegate void TestDelegate();
        public event TestDelegate TestEventHandler;

        public void Test()
        {
            TestDelegate testDelegate = new TestDelegate(Test1);
            TestEventHandler += new TestDelegate(Test1);

            testDelegate();
            TestEventHandler();
        }
        public void Test1()
        {
        }
    }
}
TestDelegateAndEvent.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test.Other
{
    class Program
    {
        //public static delegate void TestDelegate();
        //public static event TestDelegate TestEventHandler;
        static void Main(string[] args)
        {
            // Delegate can be triggered directly
            //TestDelegate testDelegate = new TestDelegate(Test);
            //testDelegate();


            //TestDelegateAndEvent test = new TestDelegateAndEvent();
            //test.TestEventHandler += Test;

            // Error: The delegate inner the class is private even if the type is public.
            // test.TestDelegate();

            // Error: Event can't be triggered directly.
            //test.TestEventHandler();

            Console.ReadLine();
        }

        public static void Test()
        {
            Console.WriteLine("test");
        }
    }
}
Program.cs


总结:ide

1. Delegate能够将方法做为另一个方法的参数带入其中进行运算;spa

2. 实际上Delegate和Event都是类,Event是一种特殊类型的Delegate;code

3. 类内的Delegate不能被对象调用,即使这个delegate是Public的;对象

4. delegate和event都重载了+=,-=, 可是delegate能够用=直接赋值,可是event不能够;blog

5. delegate和event都不能由对象直接触发;string

6. delegate和event都不能是static.it