事件和字段名之间的歧义

本文关键字:歧义 之间 字段 事件 | 更新日期: 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中创建的东西。