如果我们要把方法当做参数来传递的话,就要用到委托。简单来说委托是一个类型,这个类型可以赋值一个方法的引用。
//声明委托
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个参数),参数类型必须跟指向的方法发参数类型按照顺序对应
//声明委托
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个参数),参数类型必须跟指向的方法发参数类型按照顺序对应