C# 为什么.net委托分配运算符未将引用分配给原始委托?
为什么copyOfDelegate是原始委托的副本,而不是原始委托的引用副本C# 为什么.net委托分配运算符未将引用分配给原始委托?,c#,delegates,C#,Delegates,为什么copyOfDelegate是原始委托的副本,而不是原始委托的引用副本 public class DelegateTester { public delegate void PrintDelegate(); public PrintDelegate PrintCallback; } public class Client { public void Print() {
public class DelegateTester
{
public delegate void PrintDelegate();
public PrintDelegate PrintCallback;
}
public class Client
{
public void Print()
{
Console.WriteLine("in client");
}
}
static void main()
{
DelegateTester tester = new DelegateTester();
Client client = new Client();
tester.PrintCallback += new DelegateTester.PrintDelegate(client.Print);
tester.PrintCallback += new DelegateTester.PrintDelegate(client.Print);
// copy the delegate
DelegateTester.PrintDelegate copyOfDelegate = tester.PrintCallback;
tester.PrintCallback -= new DelegateTester.PrintDelegate(client.Print);
tester.PrintCallback();
copyOfDelegate.Invoke();
}
委托像字符串一样是不可变的 委托像字符串一样是不可变的 我相信代理是不可变的,所以您已经设置了:
copyOfDelegate = tester.PrintCallback;
然后:
PrintCallback -= new DelegateTester.PrintDelegate(client.Print);
实际上,您已经将原始委托实例分配给了
copyOfDelegate
,然后由于不可变性,当您分配给Printcallback
时,将创建一个新委托。我相信委托是不可变的,因此您设置了:
copyOfDelegate = tester.PrintCallback;
然后:
PrintCallback -= new DelegateTester.PrintDelegate(client.Print);
实际上,您已经将原始委托实例分配给了copyOfDelegate
,然后,由于不可变性,当您分配给Printcallback
时,将创建一个新委托