事件和字段名之间的歧义
本文关键字:歧义 之间 字段 事件 | 更新日期: 2023-09-27 18:03:37
可以在一个类中使用相同名称的属性和事件,例如:
private BusyChangedDelegate BusyChanged;
public event BusyChangedDelegate BusyChanged
{
.
.
.
}
编辑完整的源
private BusyChangedDelegate BusyChanged;
public event BusyChangedDelegate BusyChanged
{
add
{
BusyChangedDelegate delegate3;
BusyChangedDelegate busyChanged = this.BusyChanged;
do
{
delegate3 = busyChanged;
BusyChangedDelegate delegate4 = (BusyChangedDelegate) Delegate.Combine(delegate3, value);
busyChanged = Interlocked.CompareExchange<BusyChangedDelegate>(ref this.BusyChanged, delegate4, delegate3);
}
while (busyChanged != delegate3);
}
remove
{
BusyChangedDelegate delegate3;
BusyChangedDelegate busyChanged = this.BusyChanged;
do
{
delegate3 = busyChanged;
BusyChangedDelegate delegate4 = (BusyChangedDelegate) Delegate.Remove(delegate3, value);
busyChanged = Interlocked.CompareExchange<BusyChangedDelegate>(ref this.BusyChanged, delegate4, delegate3);
}
while (busyChanged != delegate3);
}
}
No。类不能声明两个同名的成员,方法重载除外。
只需将变量名更改为camelcase,无论如何都遵循正常约定…
private BusyChangedDelegate busyChanged;
来自c# 5规范的10.3节:
编辑:是的,如果您查看为类似字段的事件生成的IL:常量、字段、属性、事件或类型的名称必须不同于同一类中声明的所有其他成员的名称。
public event EventHandler Foo;
您可能同时看到一个名为Foo
的字段和一个名为Foo
的事件。这是因为IL与c#有不同的规则。c#编译器可以随意命名自动生成的字段。(例如,参见c# 4规范的10.8.1节)
在c#语言中,以与其他成员相同的方式命名字段仍然是无效的。你所发布的代码是无效的c# -它是最好的反编译器可以提出来表示c#编译器在IL中创建的东西。