Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > А какая разница между


Автор: neutrino 6.4.2005, 18:40
А какая разница между
Код

((Button)sender).Text


и

Код

(sender as Button).Text


Спасибо.

Автор: arilou 6.4.2005, 18:53
В первом случае при невозможности приведения типов будет выборшен InvalidCastException, а во втором случае - результатом приведения будет null.

Автор: mr.DUDA 6.4.2005, 18:56
И в первом и во втором примере показано, как преобразовать объект sender к Button. В случае, если sender содержит объект производный от Button, разницы между примерами - никакой.

Различия проявятся только если sender не является объектом Button. В первом примере возникнет исключение InvalidCastException, а во втором примере выражение "sender as Button" даст null, в результате при обращении через точку к свойству Text возникнет исключение NullReferenceException.

Кстати, в мсдн оператор as раскрывается как:
Цитата
expression as type

is equivalent to:

expression is type ? (type)expression : (type)null

И ещё, оператор as игнорирует пользовательские операции преобразования, определённые в классе.

Автор: neutrino 6.4.2005, 18:59
Вот-вот. Я то же самое вычитал в МСДН, но когда столкнулся с такой ситуацией, второй вариант мне выкинул тот же Exception!

Автор: mr.DUDA 6.4.2005, 19:06
Какой именно? InvalidCastException?

Оператор as никогда не выкидывает исключений, в этом весь его и смысл.

Автор: neutrino 6.4.2005, 19:07
Вероятно я не обратил внимания на тип ексепшена. Сейчас гляну...

Автор: maxim1000 6.4.2005, 19:08
Цитата
(sender as Button).Text

в этой строке не только оператор as
здесь еще идет работа со свойством Text
может, при неправильном приведении исключение бросается именно при работа с Text?

Автор: neutrino 6.4.2005, 19:15
Как оказалось я все еще молод и неопытен.

Вы были как всегда правы. У меня выкидывало именно NullPointerException.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)