Montagem descompilada - código incomum
Eu descompilei uma montagem usando o ILSpy, e uma classe em particular chamou minha atenção:
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...
}
}
}
Além disso, no código, parece que o delegado privado é usado para disparar um evento real:
if (something != null && somethingElse != 0)
{
this.someEvent(this, new CustomEventArgs(someArg));
}
A pergunta: Alguém pode adivinhar qual poderia ser a idéia por trás desses acessores customizados, assumindo que alguma "mágica de compilação / decompilação" não ocorria? Eu não estou muito familiarizado com IL, btw ...
(Nota: o aplicativo é multi-threaded e utiliza a rede, obviamente.)