ILSpyを使用してアセンブリを逆コンパイルしましたが、特に1つのクラスが注目されました。
public class CustomTextStream : NetworkStream
{
private EventHandler<CustomEventArgs> someEvent;
public event EventHandler<CustomEventArgs> SomePublicEvent
{
add
{
EventHandler<CustomEventArgs> eventHandler = this.someEvent;
EventHandler<CustomEventArgs> eventHandler2;
do
{
eventHandler2 = eventHandler;
EventHandler<CustomEventArgs> value2 =
(EventHandler<CustomEventArgs>)Delegate.Combine(eventHandler2, value);
eventHandler =
Interlocked.CompareExchange<EventHandler<CustomEventArgs>>(
ref this.someEvent, value2, eventHandler2);
}
while (eventHandler != eventHandler2);
}
remove
{
// similar stuff...
}
}
}
さらにコードでは、プライベートデリゲートが実際のイベントを発生させるために使用されているようです。
if (something != null && somethingElse != 0)
{
this.someEvent(this, new CustomEventArgs(someArg));
}
質問:「コンパイル/逆コンパイルの魔法」が行われなかったと仮定して、このカスタムアクセサーの背後にあるアイデアを誰かが推測できますか?私はILにあまり詳しくありません、ところで...
(補足:アプリケーションはマルチスレッドであり、明らかにネットワーキングを利用しています。)