委托delegate(c#基础)

委托(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

猜你喜欢

转载自blog.csdn.net/qq_32742043/article/details/80171736