При разработке собственных типов часто бывает удобно преобразоывать их в другие. Например,
если вы разрабатывается свой класс числа, использующий неограниченную точность, было
бы удобно если бы при необходимости в выражениях он преобразовывался в double, float
или int и, наоборот, float и компания преобразовывались в наш VeryCoolNumber.
В C# есть все средства для этого. Декларация подобных преобразований осуществляется
с помощью оператора, у которого имя совпадает с именем типа, в который нужно преобразовывать,
а в качестве параметра он берет значение преобразуемого типа. Также преобразования
могут быть явными и неявными - то есть, нужно ли явно использовать опреатор
преобразования () или преобразоване будет выполнено автоматически. Для указания
типа используются ключевые слова explicit и implicit соответственно в декларации оператора.
В качестве примера приведем класс комплексного числа, который явно может быть преобразован к числу,
являющемуся его вещественной частью и также из вещественного числа может быть преобразован
в комплексное
class Complex
{
public double Real;
public double Imag;
public Vector( double real, double imag )
{
Real = real;
Imag = imag;
}
public static explicit operator Vector( double real )
{
return new Vector(real, 0);
}
public static explicit operator double( Vector vector )
{
return vector.real;
}
public static void Main()
{
Console.WriteLine("{0}", (double)(Vector)(((double)new Vector(3, 2)) + 4));
}
}
|