delegate 委托关键字 如果我们要把方法当参数来传递的话,就要用到委托。简单来说委托是一个类型,这个类型可以赋值一个方法的引用。
委托是方法的抽象,它存储的就是一系列具有相同签名和返回回类型的方法的地址。调用委托的时候,委托包含的所有方法将被执行。
在我们使用委托的时候,也需要两个阶段 ,和定义类差不多。
1 首先定义委托,告诉编译器这个委托可以指向那些类型和方法
2然后创建该委托的实例。
delegate void intMethodinvoker(int x);
定义了一个叫做 intMethodinvoker的委托, 指定了返回类型void和可以指向什么类型的方法 int x。
定义一个委托要定义 方法的参数 和返回类型 ,使用delegate
delegate double TwoLongOp(long first, long second);
delegate string GetASting();
例子
private delegate sting GetAString(); 定义了一个委托
int x=40;
GetAString a =new GetAString (x.ToString); ToString后面没给括号(),
x.ToString()正常使用时必须有()的, ToString 方法可以吧所有的类型转化成字符串类型。
a指向了x中的tosting方法
string s=a(); 通过委托实例化去调用x中的tostring()
————————————————————
第二种初始化简写 GetAString a =x.ToString;
调用第二种方法用 string s =a.Invoke(); 通过Invoke方法调用a所用引用的方法
private delegate void PrintString();
stayoc void PrintStr(PrintString print) print 就是一个方法,当作一个变量传递
{
print();
}
PrintString method =Method1;
PrintStr(method);
static void Method1(){
Console.WriteLine("method1");
}
————————————————————
Action系统无返回值委托 ,要求委托的方法必须是无返回值void
Action <int> a; 方法必须是无返回值,参数类型必须是int
Action <int,int> a=PrintDoubleInt;
staic void PrintDouble(int i1, int i2){}
___________________________________
static int Text2(string str)
{
return 100;
}
Func<string,int>a= Text2; Func 必须有返回类型,最后一个int为返回类型,前面的为参数。如果只有一个就是为返回类型 最多带16个返回参数
delegate double DoubleOp(double x);
如何用Func 来表示
Func<double,double>