【发布时间】:2019-11-12 10:11:44
【问题描述】:
根据 Jon Skeet 的 answer 匿名函数不能保证返回相等的委托:
C# 规范明确指出 (IIRC) 如果你有两个 匿名函数(匿名方法或 lambda 表达式)它可能 或者可能不会从该代码创建相等的委托。 (两名代表是 如果它们具有相同的目标并引用相同的方法,则相等。)
给出的问题代码示例
button.Click += (s, e) => MessageBox.Show("Woho");
button.Click -= (s, e) => MessageBox.Show("Woho");
扩展方法的情况也一样吗?为了示例简单起见,让我们忽略扩展 string 是否是个好主意:
var text = "Woho";
// extension method body is MessageBox.Show(text)
button.Click += text.ShowMessageBoxExtension;
button.Click -= text.ShowMessageBoxExtension; // can you safely unsubscribe using delegate2?
var delegate1 = text.ShowMessageBoxExtension;
var delegate2 = text.ShowMessageBoxExtension;
Debug.Assert(delegate1 == delegate2); // or more precisely is this always true?
【问题讨论】:
标签: c# delegates extension-methods