Оператор неявного преобразования применяется автоматически в следующих случаях: когда в выражении требуется преобразование типов; методу передается объект; осуществляется присваивание и производится явное приведение к целевому типу. С другой стороны, можно создать оператор явного преобразования, вызываемый только тогда, когда производится явное приведение типов. В таком случае оператор явного преобразования не вызывается автоматически. В качестве примера ниже приведен вариант предыдущей программы, переделанный для демонстрации явного преобразования в тип int.

// Применить явное преобразование, using System;

// Класс для хранения трехмерных координат, class ThreeD {

int х, у, z; // трехмерные координаты public ThreeD()    {    х    = у = z = 0; }

public ThreeD(int i, int j, int k) { x = i; у = j; z = k; }

// Перегрузить бинарный оператор +.

public static ThreeD operator +(ThreeD opl, ThreeD op2)

{

ThreeD result = new ThreeD();

result.x = opl.x + op2.x; result.у = opl.у + op2.y; result.z = opl.z + op2.z;

return result;

}

// Выполнить на этот раз явное преобразование типов, public static explicit operator int(ThreeD opl)

{

return opl.x * opl.у * opl.z;

}

// Вывести координаты X, Y, Z. public void Show ()

{

Console.WriteLine(x + ',    '    +    у    +    ',    '    +    z)    ;

}

}

class ThreeDDemo { static void Main() {

ThreeD a = new ThreeD(1, 2, 3) ;

ThreeD b = new ThreeD(10, 10, 10);

ThreeD с = new ThreeD(); int i;

Console.Write('Координаты точки a: ');

a.Show();

Console.WriteLine() ;

Console.Write('Координаты точки b: ');

b.Show()    ;

Console.WriteLine() ;

с = a + b; // сложить координаты точек а и b Console.Write('Результат сложения a + b: ');

c.Show();

Console.WriteLine() ;

i = (int) a; // преобразовать в тип int явно,

// поскольку указано приведение типов Console.WriteLine('Результат присваивания i = а: ' + i) ;

Console.WriteLine();

i = (int)a * 2 - (int)b; // явно требуется приведение типов Console.WriteLine('Результат вычисления выражения а * 2 - b: ' + i) ;

}

}

Оператор преобразования теперь указан в явной форме, и поэтому преобразование должно быть явно приведено к типу int. Например, следующая строка кода не будет скомпилирована, если исключить приведение типов.

i = (int) а; // преобразовать в тип int явно,

// поскольку указано приведение типов

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату