点击访问官网 委托
delegate访问修饰符 delegate 返回值 委托名(参数列表);
public,可跨 namespace 使用private 修饰时其他 namespace 就不能用了delegate 关键字// 声明一个可以用来存储无参无返回值函数的委托
delegate void MyFun();
// 声明一个...的委托[我很lazy]
delegate string NextFun(string c1);
委托 委托名 = new 委托(委托的函数名);委托 委托名 = 委托的函数名;委托名.Invoke(如果有参数列表...);委托名(如果有参数列表...);// 一个平平无奇的函数
void MyTest() {
Console.WriteLine("Test被执行了~");
}
// 另一个平平无奇的函数
string NextTest(string s) {
Console.WriteLine("NextTest({0})被执行了~", s);
return s;
}
// 某方法内↓↓↓
// 创建一个 MyFun 委托变量
MyFun my = new MyFun(MyTest);
// 干别的事...
Console.WriteLine("做了一些其他的操作之后...");
// 委托的调用
my.Invoke(); // Test被执行了~
// 创建一个 NextFun 委托变量
NextFun next = NextTest;
// 干别的事...
Console.WriteLine("又做了一些其他的操作之后...");
// 委托的调用
string back = next("诶嘿嘿"); // NextTest(诶嘿嘿)被执行了~
Console.WriteLine("next委托执行的返回值:{0}", back); // next委托执行的返回值:诶嘿嘿
class TestCla
{
public MyTest MyFirst;
public MyTest MySecond;
public NextTest Next;
public void TestFun(MyTest my, NextTest next, string dosomething){
// 做了一些处理了,然后回调触发事先定义好的相关操作(委托)
my();
// ...
next(dosomething);
}
}
+ 运算符,一般都简化为 +=- 运算符,一般都简化为 -=
null;调用就会报错!==所以委托调用之前最好先判空// 一个平平无奇的委托
delegate void NextTest(string s);
// 一个平平无奇的函数
void NextTest(string s) {
Console.WriteLine("NextTest({0})被执行了~", s);
}
// 另一个平平无奇的函数
void OtherTest(string s) {
Console.WriteLine("OtherTest({0})被执行了~", s);
}
// 某方法内↓↓↓
NextTest next = NextTest;
next += OtherTest;
next("巴拉啦"); // NextTest(巴拉啦)被执行了~ \n OtherTest(巴拉啦)被执行了~
next -= NextTest;
next("嘎嘎"); // OtherTest(嘎嘎)被执行了~
System.Action
public delegate void Action();System.Func
public delegate TResult Func(); in 入参; out 返回值 [ 在最后 ] )