пятница, 4 января 2008 г.

Явное (explicit) и неявное (implicit) пользовательские приведения

Рассмотрим явное и неявное приведения. Предположим, что мы создаем класс, который должен иметь возможность приведения к данному типу, например:
class Test{}
int i=10;
Test t=(Test)i;
string s="222";
Test t1=s;

В представленном примере вначале используется явное приведение, а затем неявное.
Для использования этой возможности приведения необходимо реализовать следующий код в классе Test:

public class Test
{
private int i;
/**
Определяем оператор явного приведения. Он позволяет осуществлять явное приведение от int к Test. Например, int i=10; Test t=(Test)i;.
*/
public static explicit operator Test(int i)
{
return new Test(i);
}
/**
Определям оператор неявного приведения. Он позволяет осуществлять приведение от string к Test.
*/
public static implicit operator Test(string s)
{
int j=Convert.ToInt32(s);
return new Test(j);
}

public Test(int i)
{
this.i=i;
}

public override string ToString()
{
return string.Format("field value: {0}",i);
}

}


Для тестирования приведенного выше класса напишем следующий метод Main:

public static void Main(string[] args)
{
Test t1=(Test)100;
Console.WriteLine("Test: "+t1);
Test t2="222";
Console.WriteLine("Test: "+t2);
}

Комментариев нет: