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