我写了一个示例,
当我创建一个如下所示的委托实例时
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)
这与您不被允许的原因完全相同:
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)