簡體   English   中英

在C#擴展方法中訂閱事件是不好的做法嗎?

[英]Is it bad practice to subscribe to events in a C# Extension Method?

在這種情況下,訂閱代理CloseCompleted事件是否不好?

public static void Close(this MyWCFServiceClient proxy)
{
            proxy.CloseCompleted += (o, e) =>
            {
                if (e.Error != null)
                    proxy.Abort();
            };

            proxy.CloseAsync();
}

當代理不再被任何代碼引用時,它是否仍會被垃圾回收,或者擴展方法中的事件訂閱是否保留對代理的引用?

我不會說這是不好的做法,但是在一般情況下 ,應該很明顯會發生這種情況,即在///標記中有明確記錄。 但是,在這種情況下,我們談論的是對象的死亡-因此,調用方在調用該方法后可能並不希望對該對象做太多事情。 我也想弄清楚(也許在方法名稱中)這是異步的。

重新垃圾回收; 事件使訂戶保持活力; 不是發布者。 如果proxy符合條件,則將對其進行收集。 匿名方法似乎沒有訪問任何捕獲的范圍( proxy本身除外)-因此,保持活着沒有任何有趣的意義(委托實例本身除外)。

代理具有對您的匿名委托的引用,反之亦然。 因此,如果沒有人引用該代理,則將清除該代理和匿名代理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM