using System;
class BaseClass
{
public virtual void printOut()
{
Console.WriteLine("BaseClass");
}
}
class DerivedClass1 : BaseClass
{
public override void printOut()
{
Console.WriteLine("DerivedClass1");
}
}
class DerivedClass2 : BaseClass
{
public override void printOut()
{
Console.WriteLine("DerivedClass2");
}
}
class MainClass
{
// アップキャストしたりダウンキャストしたり
static void Main()
{
/* DerivedClass1をBaseClassに
* アップキャスト */
BaseClass b1 = new DerivedClass1();
// b1をDerivedClass1に再びダウンキャスト
if (b1 is DerivedClass1)
{
Console.WriteLine
("b1をDerivedClass1にダウンキャスト可能");
b1 = (DerivedClass1)b1;
b1.printOut();
}
else
{
Console.WriteLine
("b1をDerivedClass1にダウンキャストできない");
}
/* 元がDerivedClass1なのでb1を
* DerivedClassにダウンキャスト可能か
*is演算子で診断するとFalseになる */
*is演算子で診断するとFalseになる */
if (b1 is DerivedClass2)
{
b1 = (DerivedClass2)b1;
b1.printOut();
}
else
{
Console.WriteLine
("b1をDerivedClass2にダウンキャストできない");
}
}
}
0 コメント:
コメントを投稿