C#: Delegate and Event
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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() { } } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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"); } } }
总结:
1. Delegate可以将方法作为另外一个方法的参数带入其中进行运算;
2. 实际上Delegate和Event都是类,Event是一种特殊类型的Delegate;
3. 类内的Delegate不能被对象调用,即便这个delegate是Public的;
4. delegate和event都重载了+=,-=, 但是delegate可以用=直接赋值,但是event不可以;
5. delegate和event都不能由对象直接触发;
6. delegate和event都不能是static.