Dekompilierte Assembly - ungewöhnlicher Code
Ich habe eine Assembly mit ILSpy dekompiliert und insbesondere eine Klasse hat meine Aufmerksamkeit auf sich gezogen:
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...
}
}
}
Weiter im Code sieht es so aus, als würde ein privater Delegat verwendet, um ein tatsächliches Ereignis auszulösen:
if (something != null && somethingElse != 0)
{
this.someEvent(this, new CustomEventArgs(someArg));
}
Die Frage: Kann jemand erraten, welche Idee hinter diesen benutzerdefinierten Zugriffsmethoden steckt, vorausgesetzt, dass keine "Kompilierungs- / Dekompilierungsmagie" stattgefunden hat? Ich bin nicht sehr vertraut mit IL, übrigens ...
(Randnotiz: Die Anwendung ist multithreaded und nutzt offensichtlich die Vernetzung.)