1

这可能在一个类中具有同名的属性和事件,例如:

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);
            }
        }
4

1 回答 1

1

不可以。一个类不能声明两个同名的成员,除了方法重载。

只需将您的变量名称更改为 camelCased,这无论如何都遵循正常约定......

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 中创建的内容。

于 2013-03-13T13:17:04.027 回答