繁体   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