他の人が言ったように、すべてを との間でキャストできますObject
。ただし、インターフェイスの基本クラスを使用して、誰もあなたInt32
や他の予期しないタイプを送信しないようにする必要があります。ただし、サポートされているすべての型に共通のメソッドがある場合は、それをインターフェイスに配置することをお勧めします。したがってDraw()
、キャストせずに何でもできます。
適切なタイプを強制するだけの空のインターフェースを持つバリアント:
interface IComponent
{
}
class unit : IComponent
{
//...
}
class enemy : IComponent
{
//...
}
class gameObject
{
IComponent component;//now only objects inheriting IComponent can be assigned here
public void DrawComponent()
{
unit u = component as unit;
if (u != null) {
u.Draw();
}
enemy e = component as enemy;
if (e != null) {
e.DrawIfVisible();
}
}
}
共通の機能を宣言するインターフェースを持つバリアント:
interface IDrawable
{
void Draw();
}
class unit : IDrawable
{
public void Draw(){;}
//...
}
class enemy : IDrawable
{
public void Draw(){;}
//...
}
class gameObject
{
IDrawable component;
public void DrawComponent()
{
//now you don't need to care what type component really is
//it has to be IDrawable to be assigned to test
//and because it is IDrawable, it has to have Draw() method
if (component != null) {
component.Draw();
}
}
}