[英]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.