C#委托

网友投稿 544 2022-11-10

C#委托

C#委托

委托和类一样,是用户自定义的一种类型,表示的是数据和方法的集合,持有一个或多个方法,和一系列预定义操作

3.创建委托类型的对象,把它赋值给委托变量。

4.代码中可以像调用方法一样调用委托

1.以delegate管家你子开头

2.没有方法主体

二:创建委托对象

委托是引用类型,因此有引用和对象

1.new运算符操作数组成如下

(1)委托类型名

(2)一组圆括号,包含作为调用列表中第一个成员的方法的名字,方法可以是实例方法或静态方法。

delVar=new MyDel(myInsObj.My)

快捷语法

delVar=myInsObj.My

定义一个没有返回值和参数类型对策委托

delegate void PrintFunction(); class Test { public void Print1() { Console.WriteLine("Print1---instance"); } public static void Print2() { Console.WriteLine("Print2---static"); } }

static void Main(string[] args) { Test t = new Test(); PrintFunction pf;//创建一个空委托 pf = t.Print1;//实例化并初始化该委托 //给委托增加3个另外的方法 pf += Test.Print2; pf += t.Print1; pf += Test.Print2; if (null != pf) pf(); //调用委托 else Console.WriteLine("Delegate is empty"); Console.ReadLine(); }

//Print1-- - instance //Print2-- -static //Print1---instance //Print2-- -static

调用带返回值得委托

delegate int MyDel(); class MyClass { int intValue = 5; public int Add2() { intValue += 2;return intValue; } public int Add3() { intValue += 3;return intValue; } }

class Program { //调用列表中最后一个方法返回的 值就是委托调用返回的值 //调用列表中所有其他方法的返回值都会被忽略 static void Main(string[] args) { MyClass mc = new MyClass(); MyDel mDel = mc.Add2;//创建并初始化委托 mDel += mc.Add3; mDel += mc.Add2; Console.WriteLine("Value:{0}",mDel()); Console.ReadLine(); } }

调用带引用参数的委托

delegate void MyDel(ref int x); class MyClass { public void Add2(ref int x) { x += 2; } public void Add3(ref int x) { x += 3; } }

//有引用参数,参数值会根据调用列表中的一个或多个方法的返回值而改变 //在调用委托列表中的下一个方法时,参数的新值(不是初始值)会传递给下一个方法 class Program { static void Main(string[] args) { MyClass mc = new MyClass(); MyDel mDel = mc.Add2; mDel += mc.Add3; mDel += mc.Add2; int x = 5; mDel(ref x); Console.WriteLine("Value:{0}",x); Console.ReadLine(); } }

匿名方法

delegate int otherDel(int inParam); class Program { static void Main(string[] args) { otherDel del = delegate (int x) { return x += 20; }; Console.WriteLine("{0}",del(5)); Console.WriteLine("{0}",del(6)); Console.ReadLine(); } }

使用匿名方法的地方:

1.delegate类型关键字

2.参数列表,如果语句块没有使用任何参数可以省略

3.语句块,包含了匿名方法的代码

Lambda表达式

1.删除delegate关键字

2.在参数列表和匿名方法主体之间放入Lambda运算符=>

delegate double MyDel(int par); class Program { static void Main(string[] args) { MyDel del = delegate (int x) { return x + 1; };//匿名方法 MyDel le1 = (int x) => { return x + 1; };//Lambda 表达式 MyDel le2 = (x) => { return x + 1; }; MyDel le3 = x => { return x + 1; }; MyDel le4 = x => x + 1; Console.WriteLine("{0}",del(12)); Console.WriteLine("{0}", le1(12)); Console.WriteLine("{0}", le2(12)); Console.WriteLine("{0}", le3(12)); Console.WriteLine("{0}", le4(12)); Console.ReadLine(); } }

Lambda表达式的参数列表的要点如下:

1.:Lambda表达式参数列表中的参数必须在参数数量、类型和位置上与委托相匹配

2.表达式的参数列表中的参数不一定需要包含类型(隐式类型)除非委托有ref 或者out 参数

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:C#4.0特性
下一篇:SqlServer性能优化(一)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~