从控件编写事件代码时,我应该显式转换对象还是引用它

时间:2009-02-25 12:19:18

标签: .net

如果我正在编写代码来处理来自窗体上控件的事件,如下所示:

 private void btnButton_Click(object sender, EventArgs e)
 {
        Button btn = (Button)sender;
        btn.Text = "Button pressed"
 }

我是否应该始终将发送方对象强制转换为正确的类型(正如我上面所做的那样),或者明确引用控件名称更好,例如:

 private void btnButton_Click(object sender, EventArgs e)
 {
        btnButton.Text = "Button pressed"
 }

这里的最佳做法是什么?我想我可能会担心这太多了......

6 个答案:

答案 0 :(得分:4)

我更喜欢直接引用按钮(选项2),因为它更容易搜索引用按钮的位置并更改文本。

答案 1 :(得分:4)

我个人使用发件人,如果我将相同的方法绑定到多个控件,例如

 private void checkBox_Click(object sender, EventArgs e)
 {
    CheckBox box = (CheckBox)sender;
    myDataObject.SomeOption = box.Value;
 }

如果可以保持可维护性,我认为最好直接引用控件。

请记住,动态创建的控件也需要使用sender方法。

答案 2 :(得分:2)

这实际上取决于应用程序。在某些情况下(通常是简单的小型表格),可以引用控件属性。在某些情况下(任何时候你以编程方式添加控件),绝对有必要使用转换方法。

答案 3 :(得分:2)

如果每个控件都有单独的事件处理程序 - 直接使用控件。

如果您有一个用于少数控件的事件处理程序 - 请使用转换为sender

换句话说,尽可能经常地使用控制,imho。

答案 4 :(得分:1)

对于处理单个控件的事件,我会使用#2。为了可维护性,我没有命名处理多个控件_的例程。相反,我创建一个单独的名称,指示它处理多个控件的事件,例如MultiShapeButtons_Click而不是btnShapeButton1_Click

答案 5 :(得分:0)

如果处理程序仅适用于特定控件,我会使用第一个选项。第二个选项适用于常规处理程序,例如处理页面上的所有CheckBox或某些控件(Rob提供它的方式)。