Элемент управления ASP.Net RadioButton наследует CheckBox - PullRequest
0 голосов
/ 09 августа 2010

Я только что столкнулся с "ошибкой" со следующим кодом.

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» и «Checkbox вещи» оба работали для RadioButton.

При просмотре MSDN ошибка теперь очевидна: RadioButton наследует от CheckBox, а не от WebControl напрямую, поэтому оба оператора возвращают true.

Я публикую этот вопрос, так как я кодирую в ASP.Net с тех пор, как 1.0 была в бета-версии, и это является полным шоком для меня и всех остальных в моей команде.

Хотя это правда, что RadioButton обладает всеми функциями CheckBox, мое «предположение» заключалось в том, что это был бы совершенно другой элемент управления.

Это, очевидно, "не настоящий вопрос", а скорее вопрос для обсуждения, поэтому я публикуюсь как CW.

Ответы [ 2 ]

1 голос
/ 09 августа 2010

Поскольку RadioButton наследует от CheckBox, вы можете просто изменить свои операторы if на:

if(control is RadioButton) 
{ 
    //Do radiobutton stuff 
} 
else if(control is CheckBox) 
{ 
    //Do checkbox stuff 
} 
0 голосов
/ 09 августа 2010

Это было, вероятно, легче сделать; вместо того, чтобы перекодировать всю ту же логику, они просто напрямую наследуют и переопределяют рендеринг для использования переключателя ...

Ах, красота наследства, но это именно то, где это может быть болезненным: -)

Было бы лучше использовать if .. elseif, если вы все равно хотите выполнить только одно условие; вместо того, чтобы запускать каждое условие if. Помогает с производительностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...