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

いいえ。クラスは、メソッドのオーバーロードを除き、同じ名前の 2 つのメンバーを宣言することはできません。

変数名を camelCased に変更するだけで、通常の規則に従います...

private BusyChangedDelegate busyChanged;

C# 5 仕様のセクション 10.3 から:

定数、フィールド、プロパティ、イベント、または型の名前は、同じクラスで宣言されている他のすべてのメンバーの名前とは異なる必要があります。

編集:はい、フィールドのようなイベント用に生成された IL を見ると:

public event EventHandler Foo;

というフィールドと というイベントの両方表示される場合があります。これは、IL には C# とは異なるルールがあるためです。C# コンパイラは、自動生成されたフィールドに任意の名前を付けることができます。(たとえば、C# 4 仕様のセクション 10.8.1 を参照してください。)FooFoo

C# 言語では、他のメンバーと同じ方法でフィールドに名前を付けることはまだ有効ではありません。投稿したコードは有効な C# ではありません。C# コンパイラが IL で作成したものを表現するために、逆コンパイラが思いつくのはこれが最善です。

于 2013-03-13T13:17:04.027 に答える