我反編譯使用ILSpy組件,特別是一類了我的注意:反編譯彙編 - 異常代碼
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,順便說一句...
(旁註:應用是多線程的,利用網絡,很明顯。)
看起來像第一眼默認代碼 - 正常的「事件」其實是一些接近這個代碼。考慮嘗試使用事件而不是反編譯來創建代碼。 – 2013-03-26 19:58:06
我看到奇怪的東西,像這樣產生的混淆器只是爲了混淆你。 – NickD 2013-03-26 19:58:59
@Alexei Levenkov我已經做到了。我沒有得到相同的結果。 「正常」反編譯事件中唯一的事情是'Delegate.Combine()'部分 – Less 2013-03-26 19:59:45