C# 委托(delegate)

1.什么是委托

委托是一种引用类型,它是函数指针的托管版本。在C#中,委托是一种可以把引用存储为函数的类型。委托可以引用实例和静态方法,而函数指针只能引用静态方法。委托的声明非常类似于函数,和函数不同的的是委托不带函数体,并且需要Delegate关键字。委托的声明指定了一个函数签名,其中包含参数列表和和一个返回类型。在定义了委托后,就可以声明该委托类型的变量,然后可以将这个变量初始化为与该委托有相同签名的函数进行引用,随后可以使用委托变量调用该函数(通俗点来讲,委托就是可以将一个类作为参数进行传递)。

2.声明委托

关键字:Delegate
语法:Delegate 返回类型 委托名(参数类型 参数名)
示例:

public delegate int Sum(string name);

3.实例化委托

一旦声明了委托类型,委托对象必须使用 new 关键字来创建,且与一个特定的方法有关。当创建委托时,传递到 new 语句的参数就像方法调用一样书写,但是不带有参数。
示例:

public delegate int Del(int A);
static int num = 5;
public static int Add(int a)
{
    num += a;
    return num;
}

public static int Subtract(int b)
{
    num -= b;
    return num;
}

public static int Get()
{
    return num;
}

static void Main(string[] args)
{
    Del num1 = new Del(Add); 
    Del num2 = new Del(Subtract);
    num1(10);
    Console.WriteLine("执行完Add方法,num的值为:{0}",Get());
    num2(5);
    Console.WriteLine("执行完Subtract方法,num的值为:{0}",Get());
    Console.Read();
}

执行代码后得到的结果:
C# 委托(delegate)_第1张图片

4.委托的多播

说明:委托对象可使用 “+” 运算符进行合并。一个合并委托调用它所合并的两个委托。只有相同类型的委托可被合并。“-” 运算符可用于从合并的委托中移除组件委托。

使用委托的这个有用的特点,您可以创建一个委托被调用时要调用的方法的调用列表。这被称为委托的 多播(multicasting),也叫组播。
示例:

public delegate int Del(int A);
static int num = 5;
public static int Add(int a)
{
    num += a;
    return num;
}

public static int Subtract(int b)
{
    num -= b;
    return num;
}

public static int Get()
{
    return num;
}

static void Main(string[] args)
{
    Del num;
    Del num1 = new Del(Add); 
    Del num2 = new Del(Subtract);
    num = num1;
    num += num2;
    num(10);
    Console.WriteLine("num的值为:{0}",Get());
    Console.Read();
}

执行代码后的结果:
C# 委托(delegate)_第2张图片

你可能感兴趣的:(c#,开发语言)