委托添加和删除

Rag*_*v55 2 c# delegates

我写了一个示例,

当我创建一个如下所示的委托实例时

AddFunctions d1 += new AddFunctions(Function1); 
Run Code Online (Sandbox Code Playgroud)

我收到了编译错误,因此删除了+ =并以这种方式创建

AddFunctions d1 = new AddFunctions(Function1);
Run Code Online (Sandbox Code Playgroud)

我只是很想知道,为什么在创建单个委托实例时不允许多播(+ =)?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Delegates
{
    public delegate void AddFunctions();

    class Program
    {

        static void Main(string[] args)
        {
            AddFunctions d1 = new AddFunctions(Function1);
            d1 -= d1;
            d1();
        }

        static void Function1()
        {
        }

        static void Function2()
        {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 5

这与您不被允许的原因完全相同:

int i += 1;
Run Code Online (Sandbox Code Playgroud)

+=运营商的代表,是一个组合.允许事件(它映射到add访问器)和字段/变量(只要分配了变量)(它映射到的位置Delegate.Combine)

真的想用它+=,试试:

AddFunctions d1 = null;
d1 += Function1;
Run Code Online (Sandbox Code Playgroud)

但是,以下更容易:

AddFunctions d1 = Function1;
Run Code Online (Sandbox Code Playgroud)