C#委托

来源:互联网 发布:js注释快捷键 编辑:程序博客网 时间:2024/05/22 16:27
如果我们要把方法当做参数来传递的话,就要用到委托。简单来说委托是一个类型,这个类型可以赋值一个方法的引用。




//声明委托
delegate void IntMethodInvoker(int x);
delegate double TwoLongOp(long first,long second);
delegate string GetAString();




例子:
int x = 40;
string s =x.ToString();
Console.WriteLine(s);
Console.ReadKey();


使用委托类型创建实例
private delegate string GetAString();


static void Main(){


int x = 40;
GetAString a = new GetAString(x.ToString); //a指向了x中的tostring方法
string s = a();          //通过委托实例去调用x中的tostring方法
Console.WriteLine(s);    //通过委托类型去调用一个方法,跟直接调用方法是一样的
Console.ReadKey();


}


第一种初始化的方式:GetAString a =new GetAString(x.ToString);
第二种初始化的方式:GetAString a =x.ToString; (常用)


第一种调用方法的方式:string s = a();(常用)
第二种调用方法的方式:string s = a.Invoke();


-------------------------------------------------------------------------


Action委托:action声明的委托是没有返回值的


Action a = PrintString;           //action是系统内置(预定义)的一个委托类型,它可以指向一个没有返回值,没有参数的方法。


Action <int> a = PrintInt;        //定义了一个action委托,这个类型可以指向一个没有返回值,有一个int参数的方法


Action <string> a = PrintString;  //定义了一个action委托,这个类型可以指向一个没有返回值,有一个string参数的方法,在这系统会自动寻找方法重载中匹配的方法


action委托可以通过泛型去指定指向的方法的参数类型,最多可以指定16各参数类型。


Func委托:func声明的委托必须要有返回值


Func<int>a = Test1;  //func中的泛型类型指定的是方法的返回值类型


Func<string,int,int,int>a = Test2;   //func后面可以跟多个类型,最后一个类型是返回值类型,前面的类型是参数类型(最多可以有16个参数),参数类型必须跟指向的方法发参数类型按照顺序对应









0 0