Результат сложения а+Ь: 11, 12, 13 Результат присваивания i = а: 6
Результат вычисления выражения а * 2 - Ь: -988
Как следует из приведенного выше примера программы, когда объект типаThreeDиспользуется в таком целочисленном выражении, какi=а,происходит его преобразование. В этом конкретном случае преобразование приводит к возврату целого значения 6, которое является произведением координат точкиа,хранящихся в объекте того же названия. Но если для вычисления выражения преобразование в типintне требуется, то оператор преобразования не вызывается. Именно поэтому операторный методoperator int
Но для различных целей можно создать разные операторы преобразования. Так, для преобразования объекта типаThreeDв типdoubleможно было бы определить второй оператор преобразования. При этом каждый вид преобразования выполнялся бы автоматически и независимо от другого.
Оператор неявного преобразования применяется автоматически в следующих случаях: когда в выражении требуется преобразование типов; методу передается объект; осуществляется присваивание и производится явное приведение к целевому типу. С другой стороны, можно создать оператор явного преобразования, вызываемый только тогда, когда производится явное приведение типов. В таком случае оператор явного преобразования не вызывается автоматически. В качестве примера ниже приведен вариант предыдущей программы, переделанный для демонстрации явного преобразования в тип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 ;