簡體   English   中英

擴展控制-使用發件人或此

[英]extending control - use sender or this

我正在擴展控件的功能。 我想知道在事件中使用強制轉換的發件人與關鍵字是否有任何優勢。 例如:

public class CustomTextBox : TextBox
{
    public CustomTextBox()
    {
        Loaded += CustomTextBox_Loaded;
    }
    void CustomTextBox_Loaded(object sender, RoutedEventArgs e)
    {
        //use either
        var c = (CustomTextBox)sender;
        //or
        var c2 = this;
        //do whatever...
    }
}

我相信使用此方法可能會更有效(無需強制轉換)。

通常,事件是在訂閱者類的發布類之外進行處理的。 在這樣的設置中,可能需要獲取訂閱者中的發布者的引用,也就是在強制轉換發送者以獲取發布者的引用時很方便。

我同意,如果您可以在不進行類型轉換的情況下獲得發布者的引用,那應該使用this

但是,由於要擴展控件,請檢查使用基類事件是否真的必要。 事件是針對外部世界的,而不是針對兒童課堂的。

如果事件模式已在基本控件類中正確實現,則我希望有一個虛擬方法負責引發該錯誤,您可以在擴展控件時重寫該方法,如下所示-

class CustomTextBox  : TextBox
{      

   protected override void OnClick(EventArgs e)
   {          
       //place your code here if you want to do the processing before the contol raises the event. Before call to  base.OnClick(e);
       base.OnClick(e); // call to base funciton fires event 
       //place your code here if you want to do the processing after the contol raises the event. After call to  base.OnClick(e);
   }

}

希望能幫助到你。

我懷疑您會發現任何一種可測量的性能差異,尤其是對於類似Loaded的事件,該事件在控件的生命周期內僅會引發一次。

就是說,在我看來,您應該繼續使用this ,只是因為它更方便且更具表現力。 如果您的方法已經在發送者類的代碼中,為什么不呢? 在代碼理解,易於編寫,可維護性或編程中使用sender參數而不是僅僅使用this參數的任何其他共同目標方面,有什么可能的收獲?

暫無
暫無

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

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