.net Delegate

委托和事件这两个概念是完全配合的。委托可以看成是函数指针,那就是说,它能够引用对象方法,通过传递地址的机制完成。委托是一个类,当你对它实例化时,要提供一个对象方法,将其作为它构造函数的参数。

每一个委托都有自己的签名,例如:Delegate int SomeDelegate(string s, bool b);是一个委托声明,在这里,提及的签名,就是说SomeDelegate 这个委托有 string 和 bool 类型的形参,返回一个int 类型。

上面提及的:当你对委托实例化时,要提供一个对象方法(引用函数),将其作为它构造函数的参数。这里要注意了:被引用的这个函数必须和委托有相同的签名。

Demo:

 1 using System;
 2 
 3 namespace ConsoleApplication3
 4 {
 5     public delegate void GreetingDelegate(string name);//声明委托
 6     class Program
 7     {
 8         public static void GreetPeople(string name, GreetingDelegate gd)//委托形参
 9         {
10             gd(name);
11         }
12         public static void EnglishGreeting(string name)
13         {
14             Console.WriteLine("morning, " + name);
15         }
16         public static void ChineseGreeting(string name)
17         {
18             Console.WriteLine("早上好, " + name);
19         }
20         static void Main(string[] args)
21         {
22             GreetPeople("周鸿", ChineseGreeting);//方法作为委托对象
23             GreetPeople("chouhom", EnglishGreeting);
24             Console.ReadKey();
25         }
26     }
27 }

Resut:

原文地址:https://www.cnblogs.com/homchou/p/2889116.html