КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Операции is и as
Область видимости Переменные, объявленные в программе, имеют область видимости. Это значит, что переменная, описанная в одной части программы, не обязательно будет видна в другой. Вот наиболее часто встречающиеся ситуации: · Переменные, описанные внутри метода, не будут видны за пределами этого метода. Например:
void MethodA() { // Описываем переменную delta int delta = 7; }
void MethodB() { // Ошибка: переменная delta в этом методе неизвестна! int gamma = delta + 1; }
· Переменные, описанные внутри блока или составного оператора, видны только внутри этого блока. Например:
void Method() { if (a == 7) { int b = a + 5; } // Ошибка: переменная b здесь уже неизвестна! MessageBox.Show(b.ToString()); }
· Переменные, описанные внутри класса, являются глобальными и доступны для всех методов этого класса, например:
class Form1: Form { int a = 5;
void Method() { // Переменная a здесь действительна MessageBox.Show(a.ToString()); } }
Часто бывает удобно переменные разных классов записать в один список, чтобы было легче его обрабатывать. Чтобы проверить к какому классу принадлежит какой-либо объект, можно использовать оператор is: он возвращает истину, если объект принадлежит указанному классу. Пример:
Button b = new Button(); if (b is Button) MessageBox.Show("Это кнопка!"); else MessageBox.Show("Это что-то другое...");
Как правило, в общих списках объекты хранятся в «обезличенном» состоянии, так, чтобы у всех у них был лишь минимальный общий для всех набор методов и свойств. Для того чтобы получить доступ к расширенным свойствам объекта, нужно привести его к исходному классу с помощью операции приведения as:
(someObject as Button).Text = "Это кнопка!";
Следует помнить, что операция приведения сработает только в том случае, если объект изначально принадлежат тому классу, к которому его пытаются привести (или совместим с ним), в противном случае оператор as выбросит исключение и остановит выполнение программы. Поэтому более безопасный подход состоит в комбинированном применении операторов as и is: сначала проверяем совместимость объекта и класса, и только потом выполняем операцию приведения:
if (someObject is Button) (someObject as Button).Text = "Это кнопка!";
В качестве практического примера использования этих операций рассмотрим пример программы, которая перебирает все элементы управления на форме, и у кнопок (но не у других элементов управления!) заменяет текст на пять звездочек «*****»:
private void Form1_Load(object sender, EventArgs e) { // Перебираем все элементы управления foreach (Control c in this.Controls) if (c is Button) // Кнопка? (c as Button).Text = "*****"; // Да! }
Дата добавления: 2014-11-07; Просмотров: 652; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |