Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Восстановление из объектного образа для пользовательских типов

Восстановление из объектного образа для пользовательских типов

Когда методу, предполагающему получение экземпляров System.Object, передаются пользовательские структуры или перечни, тоже происходит их приведение к объектному типу, Однако после получения входного параметра вызванным методом вы не сможете получить доступ к каким бы то ни было членам структуры (или перечня), пока не выполните операцию восстановлений из объектного образа для данного типа. Вспомним структуру МуРoint, определенную в этой главе выше.

Struct MyPoint {
 public int x, у;
}

Предположим, что вы посылаете переменную MyPoint новому методу с именем UseBoxedMyPoint().

static void Main(string[] args) {
 …
 MyPoint p;
 p.x = 10;
 p.y = 20;
 UseBoxedMyPoint(p);
}

При попытке получить доступ к полю данных MyPoint возникнет ошибка компиляции, поскольку метод предполагает, что вы действуете на строго типизованный System.Object.

static void UseBoxedMyPoint(object o) {
 // Ошибка! System.Object не имеет членов-переменных
 // с именами 'х' и 'у' .
 Console.WriteLine ("{0}, {1}", о.х, о.у);
}

Чтобы получить доступ к полю данных MyPoint, вы должны сначала восстановить параметр из объектного образа. Сначала можно использовать ключевое слово C# is для проверки того, что этот параметр на самом деле является переменной MyPoint. Ключевое слово is рассматривается в главе 4, здесь мы только предлагаем пример его использования.

static void UseBoxedMyPoint(object о) {
 if (о is MyPoint) {
  MyPoint p = (MyPoint)o;
  Console.WriteLine ("{0}, {1}", p.x, p.y);
 } else Console.WriteLine("Вы прислали не MyPoint.");
}

Исходный код. Проект Boxing размещен в подкаталоге, соответствующем главе 3.

Оглавление книги


Генерация: 2.699. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз