Dekompilowany zespół - niezwykły kod
Zdekompilowałem zestaw używając ILSpy, a jedna klasa zwróciła moją uwagę:
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...
}
}
}
Dalej w kodzie wydaje się, że prywatny delegat jest używany do strzelania do rzeczywistego zdarzenia:
if (something != null && somethingElse != 0)
{
this.someEvent(this, new CustomEventArgs(someArg));
}
Pytanie: Czy ktoś może zgadnąć, co może być pomysłem na te niestandardowe akcesoria, zakładając, że nie nastąpiła „magia kompilacji / dekompilacji”? Nie znam się na IL, btw ...
(Uwaga dodatkowa: aplikacja jest wielowątkowa i oczywiście wykorzystuje sieć).