Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Варианты явного преобразования для типа Square
Варианты явного преобразования для типа Square
Теперь вы можете явно превращать прямоугольники в квадраты, но рассмотрим еще несколько вариантов явного преобразования. Поскольку у квадрата стороны равны, можно явно преобразовать System.Int32 в Square (длина стороны квадрата будет равна значению поступающего целого числа). Аналогично можно изменить определение Square, если требуется обеспечить преобразование из Square в System.Int32. Вот логика соответствующего вызова.
static void Main(string[] args) {
…
// Преобразование System.Int32 в Square.
Square sq2 = (Square)90;
Console.WriteLine("sq2 = {0}", sq2);
// Преобразование Square в System.Int32.
int side = (int)sq2;
Console.WriteLine("Длина стороны sq2 = {0}", side);
}
А вот как следует обновить определение типа Square.
public struct Square {
…
public static explicit operator Square(int sideLength) {
Square newSq;
newSq.Length = sideLength;
return newSq;
}
public static explicit operator int(Square s) { return s.Length; }
}
Выглядит немного странно, не так ли? Честно говоря, преобразование из Square в System.Int32 не является интуитивно очевидной (или полезной) операцией. Однако она демонстрирует одну очень важную особенность пользовательских подпрограмм преобразования; компилятору "все равно" из чего и во что вы преобразуете – важно, чтобы ваш программный код был синтаксически правильным. Так что, как в случае с перегрузкой операций, только из того, что вы можете создать операцию явного преобразования для данного типа, совсем не следует, что вы обязаны это делать. Как правило, этот подход оказывается наиболее полезным тогда, когда создаются типы структуры .NET, поскольку такие типы не могут использовать иерархии классического наследования (для которых соответствующие преобразования реализуются автоматически).
- Создание пользовательских подпрограмм преобразования
- 6.2. Типичные ошибки при проведении программ продвижения и варианты их устранения
- Использование CAST() с типами дата
- 4. Варианты операций соединения
- Перегрузка методов с несколькими параметрами типа
- Создание столбцов и работа с типами содержимого
- 2.7 Преобразования типов
- Пропуск параметров типа
- Приложение 1 Варианты учебных заданий
- 2.6.2. Варианты программы, полученые путем переупорядочивания предложений и целей
- Варианты дополнительных предложений
- 3.2. Ключи типа key_t и функция ftok