ASP.Net RadioButton控件继承CheckBox

时间:2010-08-09 14:15:32

标签: asp.net inheritance checkbox radio-button

我刚遇到以下代码的“bug”。

foreach(Control control in controls)
{
    if(control is TextBox)
    {
        //Do textbox stuff
    }
    if(control is CheckBox)
    {
        //Do checkbox stuff
    }
    if(control is RadioButton)
    {
        //Do radiobutton stuff
    }
}

错误是“radiobutton stuff”和“checkbox stuff”都在为RadioButton运行。

当单步执行并查看MSDN时,错误现在很明显,RadioButton继承自CheckBox,而不是直接从WebControl继承,因此两个if语句都将返回true。

我发布了这个问题,因为我已经在ASP.Net中进行了编码,因为1.0是在测试版中,这对我和我团队中的其他人都是完全的震撼。

虽然RadioButton确实具有CheckBox的所有功能,但我的“假设”是它本来是一个完全不同的控件。

这显然“不是一个真正的问题”而且更多的讨论点因此我发布为CW。

2 个答案:

答案 0 :(得分:1)

由于RadioButton继承自CheckBox,您只需将if语句更改为:

即可
if(control is RadioButton) 
{ 
    //Do radiobutton stuff 
} 
else if(control is CheckBox) 
{ 
    //Do checkbox stuff 
} 

答案 1 :(得分:0)

这可能更容易;而不是重新编码所有相同的逻辑,他们只是直接继承并覆盖渲染以使用单选按钮......

啊,继承的美丽,但这正是痛苦的地方: - )

如果您只想运行一个条件,最好使用if .. elseif;而不是运行每个if条件。有助于提高绩效。