Conversion Operators Overview 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Conversion Operators Overview



Conversion operators have the following properties:

· Conversions declared as implicit occur automatically when it is required.

· Conversions declared as explicit require a cast to be called.

· All conversions must be static.

 


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

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


Код

ß---

 

 

Результат 1

conversion occurred

 


Example 2

Description

This example demonstrates an implicit conversion operator by defining a conversion operator that undoes what the previous example did: it converts from a value class called Digit to the integral Byte type. Because any digit can be converted to a Byte, there's no need to force users to be explicit about the conversion.

Code

struct Digit { byte value; public Digit(byte value) //constructor { if (value > 9) { throw new System.ArgumentException(); } this.value = value; } public static implicit operator byte(Digit d) // implicit digit to byte conversion operator { System.Console.WriteLine("conversion occurred"); return d.value; // implicit conversion } }   class TestImplicitConversion { static void Main() { Digit d = new Digit(3); byte b = d; // implicit conversion -- no cast needed } }

Output 2

conversion occurred


Пример 2

Описание

В этом примере демонстрируется неявное преобразование, в котором определяется оператор преобразования, выполняющий операцию, обратную описанной в предыдущем примере: преобразование значения типа Digit к целочисленному типу Byte. Поскольку к типу Byte можно преобразовать любое значение типа Digit, нет нужды делать преобразование явным для пользователя.

Код

struct Digit { byte value; public Digit(byte value) //constructor { if (value > 9) { throw new System.ArgumentException(); } this.value = value; } public static implicit operator byte(Digit d) // implicit digit to byte conversion operator { System.Console.WriteLine("conversion occurred"); return d.value; // implicit conversion } } class TestImplicitConversion { static void Main() { Digit d = new Digit(3); byte b = d; // implicit conversion -- no cast needed } }

Результат 2

conversion occurred



Поделиться:


Последнее изменение этой страницы: 2017-01-19; просмотров: 139; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.13.255 (0.006 с.)