我把委托理解为:委托是一种方法的格式,当然他也是一种类型。
只要是方法的格式跟委托定义的格式是一样的,那么就可以把该方法附加给该委托。看以下demo
声明委托:
<p style="margin:0in;font-family:微软雅黑;font-size:12.0pt"></p><pre name="code" class="csharp">public delegate void Add(int a,int b );
声明一个格式相同的方法:
static void OtherMethod(int a ,int b) { Console.WriteLine(a+b); }
给类声明一个委托类型的成员变量
public class Person { public string Name { set; get; } public string Age { set; get; } public Add MyAdd ; }
将方法附加给委托,调用,测试如下:
static voidMain(string[] args) { Person p1 =new Person (); p1.MyAdd = OtherMethod; p1.MyAdd(7, 8); Console.ReadLine(); }
控制台输出—— 15
如果我们定义的OtherMethod不常用,就没有必要单独声明一个方法。可以用匿名方法,即:在给委托附加方法的时候,直接构造一个跟委托格式相同的匿名方法就可以了:
写法如下:
p1.MyAdd = delegate(inta, int b) { Console.WriteLine(a + b); };
匿名方法,顾名思义,没有方法名,只有方法参数和方法的算法,可真是够简单了。
同样我们也可以直接用lamuda表达式,直接构造一个方法,如下:
p1.MyAdd = (int a, int b) => {Console.WriteLine(a + b); };
匿名方法和拉姆达表达式的出现,使得写方法变得更加简便了。
时间: 2024-10-14 00:28:04