委托delegate(c#基础)

xiaoxiao2021-02-28  55

委托(delegate 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递(定义完成之后它就是一种数据类型);简单的说,委托是一种类型,用于传递一个函数的引用; 优点:这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。 委托的声明 在C#中使用一个类分两个阶段,首选定义这个类,告诉编译器这个类由什么字段和方法组成的,然后使用这个类实例化对象。在我们使用委托的时候,也需要经过这两个阶段,首先定义委托,告诉编译器我们这个委托可以指向哪些类型的方法,然后,创建该委托的实例。

使用delegate关键字定义委托的语法如下: delegate void IntMethodInvoker(int x); 代码含义: 定义了一个叫做IntMethodInvoker的委托,这个委托是一个可以返回值为空,含有一个参数int的这一类函数的引用(具体指向那一个函数,需要将委托实例化); void代表委托的返回值类型, 参数代表要委托的一类函数的参数 定义一个委托要定义方法的参数和返回值,使用关键字delegate定义。 定义委托的其他案例:  delegate double TwoLongOp(long first,long second);  delegate string GetAString(); 委托的实例化: 方式1:使用new关键字实例化,括号里传递与委托对应的方法名; delegate string GetAString(int a,int b);//定义了一个返回值为string的委托 GetAString a=new GetString(Sum);//实例化了一个GetASting委托,它用来指向i.tosting()方法(也可以说是 //i.tostring()方法的引用 //委托实例引用的方法 string Sum(int a,int b){ return (a+b).tostring; }

方式2:直接=赋值 delegate string GetAString();//定义了一个返回值为string的委托 GetAString a=Sum; string Sum(int a,int b){ return (a+b).tostring; } 委托实例的实现: 方式1:直接使用委托实例名加实参(就是把委托所指向的方法名换成实例名称即可) delegate string GetAString();//定义了一个返回值为string的委托 GetAString a=Sum; string s=a(3,4);

方法2:使用委托下的Invoke方法调用; delegate string GetAString();//定义了一个返回值为string的委托 GetAString a=Sum; string s=a.Invoke(3,4); 将引用类型作为函数的参数 形参:已声明的委托类型 实参:可以本新参所引用的方法名称 一般的, 被引用的方法(实参)通过引用在 函数体中得到调用 class program{ delegate string GetAString(int a,int b);//定义了一个返回值为string的委托 //委托实例引用的方法 string Sum(int a,int b){ return (a+b).tostring; } //使用委托类型作为参数的函数 string UseDel(string methodName,Getsting ga){ return ga(1,2)+methodname;//委托方法在函数体中的实现 } static void main(string args[]){ string s=UseDel("UseDel",Sum);//Sum函数名作为实参 } }

unity学习交流群:735645445
转载请注明原文地址: https://www.6miu.com/read-2620331.html

最新回复(0)