扩展控制 - 使用发件人或此

时间:2015-11-15 23:55:04

标签: c# controls

我正在扩展控件的功能。我想知道在事件中使用已转换的发件人与关键字是否有任何优势。例如:

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...
    }
}

我相信使用这个可能会更有效率(无需播放)。

2 个答案:

答案 0 :(得分:1)

通常在订阅者类中,在发布它们的类之外处理事件。在这样的设置中,可能希望获得订户和发布者中的发布者的参考。也就是当类型转换发件人以获得发布者的引用时很方便。

我同意,在我看来,如果您可以在没有更好的类型转换的情况下获得发布者的引用,则应使用File.WriteAllText(@"yourPathOfTheFile\array.txt", stringBuilder.ToString());

但是,由于您正在扩展控件,请检查是否真的有必要使用基类的事件。一个事件是针对外部世界的,而不是针对儿童课程。

如果在基本控件类中正确实现了事件模式,我希望有一个虚拟方法负责提升你可以在扩展控件时覆盖哪个,如下所示 -

SELECT * FROM VISITS WHERE VISIT_TIME > :dateTime

希望它有所帮助。

答案 1 :(得分:0)

我怀疑你会发现任何可衡量的性能差异,特别是对于像Loaded这样的事件,只会在控件的生命周期内被提升一次。

那就是说,在我看来你应该继续使用this,因为它更方便和富有表现力。如果您的方法已经在发件人类的代码中,为什么不呢?在编程中使用sender参数而不仅仅使用this时,代码理解,编写的简易性,可维护性或任何其他共同目标可能有什么好处?