【问题标题】:ASP.Net RadioButton control inherits CheckBoxASP.Net RadioButton 控件继承 CheckBox
【发布时间】:2011-03-27 08:00:40
【问题描述】:

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

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

错误是“单选按钮的东西”和“复选框的东西”都在为单选按钮运行。

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

我发布了这个问题,因为自从 1.0 处于 Beta 版以来我一直在 ASP.Net 中编码,这对我和我团队中的其他人来说完全是一个震惊。

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

这显然“不是一个真正的问题”,更多的是一个讨论点,因此我以 CW 的身份发布。

【问题讨论】:

    标签: asp.net inheritance checkbox radio-button


    【解决方案1】:

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

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

    【讨论】:

    • 确实,修复很简单,这篇文章更多是关于实现 RadioButton 继承自 CheckBox。
    【解决方案2】:

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

    啊,继承的美妙之处,但这正是它可能令人痛苦的地方:-)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 2013-03-29
      • 2011-10-18
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      相关资源
      最近更新 更多