C# 入門 & 実践 / C sharp
3-18. 変換演算子(キャスト)オーバーロード / implicit / explicit
int i = 0;
long l = 0;
l = i; (暗黙的な変換)
i = (int)l ; (明示的な変換)
暗黙的な変換が可能な場合は、implicit
明示的な変換が必要な場合は、explicit
class Hello
{
private int x = 0;
private int y = 10;
public Hello()
{
}
public Hello( int x )
{
this.x = x;
}
// 暗黙的 int->Hello
public static implicit operator Hello(int i)
{
return new Hello(i);
}
// 明示的 Hello->int
public static explicit operator int(Hello h)
{
return h.x;
}
public void XY()
{
Console.WriteLine("x = {0} , y = {1}",x,y);
}
}
class Tester
{
static void Main(string[] args)
{
int i = 0;
Hello h = new Hello( 1 );
// int へキャスト
i = (int)h;
// i = h は当然出来ない。
Console.WriteLine("i = {0}",i);
i++;
// Hello でキャスト
Hello h2 = (Hello)i;
h2.XY();
// 暗黙的!!!
Hello h3 = i;
h3.XY();
}
}
i = 1
x = 2 , y = 10
x = 2 , y = 10
と出力されて OK .
3-17. 演算子のオーバーロード! «
3. C# 入門 / 基礎、型、文法、基本? »
3-19. 構造体( struct ) とクラス( class )の違い。
C# 入門 & 実践 / C sharp