Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp_Prog_Guide.doc
Скачиваний:
16
Добавлен:
16.11.2019
Размер:
6.22 Mб
Скачать

Операторы преобразования23

C# позволяет разработчикам объявлять операции преобразования классов или структур, делая тем самым возможным преобразование одних классов и структур в другие, а также в базовые типы или из них. Для задания преобразования используются операторы, называемые в соответствии с типом, к которому выполняется преобразование. Преобразуемый аргумент или результат преобразования (но не оба из них) должны относиться к содержащемуся типу.

class SampleClass

{

public static explicit operator SampleClass(int i)

{

SampleClass temp = new SampleClass();

// code to convert from int to SampleClass...

return temp;

}

}

Общие сведения об операторах преобразования

Операторы преобразования обладают следующими свойствами.

  • Преобразования, определенные как implicit, выполняются автоматически, если это требуется.

  • Для выполнения преобразований, определенных как explicit, требуется вызов операции приведения.

  • Все преобразования должны быть определены как static.

Using Conversion Operators

Conversion operators can be explicit or implicit. Implicit conversion operators are easier to use, but explicit operators are useful when you want users of the operator to be aware that a conversion is taking place. This topic demonstrates both types.

Example 1

Description

This is an example of an explicit conversion operator. This operator converts from the type Byte to a value type called Digit. Because not all bytes can be converted to a digit, the conversion is explicit, meaning that a cast must be used, as shown in the Main method.

Использование операторов преобразования

Операторы преобразования могут быть explicit и implicit. Пользоваться операторами неявных преобразований проще, но операторы явных преобразований оказываются полезными в тех случаях, когда пользователь должен знать, что выполняется преобразование. В этом разделе описываются преобразования обоих типов.

Пример 1 Описание

В этом примере используется оператор явного преобразования. Этот оператор преобразует тип значения Byte в тип значения Digit. Поскольку в тип Digit могут быть преобразованы не все значения типа byte, преобразование выполняется явным образом, что означает использование операции приведения, как показано в методе Main.

Code

struct Digit

{

byte value;

public Digit(byte value) //constructor

{

if (value > 9)

{

throw new System.ArgumentException();

}

this.value = value;

}

public static explicit operator Digit(byte b) // explicit byte to digit conversion operator

{

Digit d = new Digit(b); // explicit conversion

System.Console.WriteLine("conversion occurred");

return d;

}

}

class TestExplicitConversion

{

static void Main()

{

try

{

byte b = 3;

Digit d = (Digit)b; // explicit conversion

}

catch (System.Exception e)

{

System.Console.WriteLine("{0} Exception caught.", e);

}

}

}

Output 1

conversion occurred

Код

---