2010-08-09 45 views
0

我刚刚遇到了一个“bug”,下面的代码。ASP.Net RadioButton控件继承CheckBox

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”和“复选框东西”都为RadioButton运行。

当步进通过并查看MSDN,这个错误现在很明显,一个单选按钮从复选框,而不是直接从WebControl的,因此既继承if语句将返回true。

我发布这个问题,虽然因为我一直在ASP.Net编码,因为1.0是在测试版,这是一个完整的震动,我和我的团队中的其他人。

虽然这是真的,一个单选按钮确实有一个复选框的所有功能,我的“假设”是,这将是一个完全不同的控制。

这显然“不是一个真正的问题”,多讨论的焦点,因此我张贴的CW的。

回答

1

由于单选按钮从复选框继承,你可以简单地改变你的if语句:

if(control is RadioButton) 
{ 
    //Do radiobutton stuff 
} 
else if(control is CheckBox) 
{ 
    //Do checkbox stuff 
} 
+0

的确,修复容易,职位是更多的认识到,单选按钮从复选框继承。 – 2010-08-09 14:19:32

0

这可能是更容易做到;而不是重新编码都是一样的逻辑,他们干脆直接继承和覆盖渲染利用无线电按钮...

啊,继承的美丽,但是这也正是它可以是痛苦:-)

这将是最好的使用,如果elseif的..如果你只是想仍要运行一个条件;而不是每个条件都运行。有助于表现。