委托

委托

委托是函数的容器,可以理解为表示函数的变量类型

用来存储和传递函数

委托的本质是一个类,用来定义函数的类型(返回值和参数的类型)

函数必须对应和各自“格式”一致的委托


//关键字:delegate
//语法:访问修饰符 delegate 返回值 委托名(参数列表);
//可以申明在namespace和class中,更多卸载namespace里面
//申明了一个可以用来存储无参无返回值函数的容器
//这里只是定义了规则,并没有使用
delegate void FuncTest();
//同一语句块中委托规则不能重名
//申明了一个返回值为int,有一个参数int的容器
public delegate int FuncTest2(int a);
//委托的使用
static void Func()
{

}
//func中装载了Func
FuncTest func = new FuncTest(Func);
//调用委托中装载的函数
func.Invoke();
//Func后面不能带(),因为不是调用Func
FuncTest func2 = Func;
//调用委托中装载的函数
func2();
static int Func2(int value)
{
    return value;
}
FuncTest2 func3 = Func2;
func3(1);
FuncTest2 func4 = new FuncTest2(Func2);
func4.Invoke(1);
//委托常用与作为类的成员和函数的参数
class Test
{
    public FuncTest func;
    public FuncTest2 func2;

    public void TestFunc (FuncTest func,FuncTest2 func2)
    {
        int i = 1;
        i *= 2;
        //先处理别的逻辑再执行传入的函数
        func();
        func2(i);
    }
    //添加函数
    public void AddFunc(FuncTest func,FuncTest2 func2)
    {
        this.func += func;
        this.func2 += func2;
    }
    //移除函数
    public void RemoveFunc(FuncTest func,FuncTest2 func2)
    {
        this.func -= func;
        this.func2 -= func2;
    }
}
Test t = new Test();
t.TestFunc(Func,Func2);
//委托变量可以存储多个函数(多播委托)
FuncTest ff = Func;
ff += Func;
//这时ff中存储了两次Func,调用ff时会调用两次Func
ff();
//系统已经定义好的委托
//无参无返回值的委托
Action action = Func;
//返回值是泛型的无参委托
Func<string> funcs = FuncString;
//返回值是泛型的有n个参数的委托,参数在前,返回值在最后
Func<int,int> fun = Func2;
staric string FuncString()
{
    return "";
}
//可以传n个参数的委托
static void FuncT(int value,string str)
{

}
Action<int,string> action1 = FuncT;

posted @   cannedmint  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示