C#委托

1. 委托

委托就是一个函数模板,或者你也可以理解为是一个变量,不同的是一般的变量是存储值的,而委托存储的是方法。

1.1 委托的定义和简单使用

在C#中,委托是使用delegate来定义的,它看起来像一个虚方法,但是却不是。

委托的定义格式:

delegate 返回类型 委托名();//委托明遵循变量名定义规则

在简单的使用就是需要声明委托,赋值,再使用

public delegate int OneNum(int a);//定义一个委托,表示只能给这个委托赋值的方法的返回值是int类型,有一个int类型的参数
private static int DoubleNum(int a)
{
    //这个方法是让指定的数字变成二倍,随便定义的
    return a*2;
}
static void Main(string[] args)
{
    //声明
    OneNum oneNum = null;
    //赋值
    oneNum = DoubleNum;
    //或者直接声明+赋值
    //OneNum oneNum = DoubleNum;
    //或者
    //OneNum oneNum = new OneNum(DoubleNum);
    //使用
    Console.WriteLine(oneNum(10));
}

输出的结果就是:20

1.3 多播委托

委托分为多播委托和单播委托,单播委托就是我们上面所说的,里面只含有一个方法,所以我们通过委托调用的时候,也是只调用那一个方法。

而多播委托其实就是一个方法集合,放你调用多播委托的时候,就会将多播委托这个集合遍历,挨个调用里面的方法。

其实单播委托也可以看成是只有一个成员的多播委托。

使用多播委托的方法就是:委托变量 += 方法;


static void Test1()
{
  Console.WriteLine("Test1");
}
static void Test2()
{
  Console.WriteLine("Test2");
}
static void Main(string[] args)
{
  Action action = null;
  action += Test1;//也可以action = Test1;但是最好使用+=。
  action += Test2;
  action();
}

就是这样使用。

多播委托最好使用返回类型为void的,因为多播委托只能返回最后一个方法的返回类型。

而将方法从多播委托中移除的方法就是使用-=符号。

static void Test1()
{
  Console.WriteLine("Test1");
}
static void Test2()
{
  Console.WriteLine("Test2");
}
static void Main(string[] args)
{
  Action action = Test1;
  action += Test2;
  Console.WriteLine("未移除时:");
  action();
  Console.WriteLine("移除后:");
  action -= Test1;
  action();
}

 

 
posted @ 2022-07-12 23:07  木木木林森  阅读(348)  评论(0)    收藏  举报