Операции is и as
Часто бывает удобно переменные разных классов записать в один спи- сок, чтобы было легче его обрабатывать. Чтобы проверить, к какому классу принадлежит какой-либо объект, можно использовать оператор 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 = "*****"; // Да!
}
Достарыңызбен бөлісу: |