洞察探索open banking如何通过小程序容器技术助力金融企业实现数据安全和数字化转型
544
2022-11-10
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~