在基类中获取派生类的类类型,并将其作为类型参数传递

时间:2013-12-15 17:33:30

标签: c# inheritance

我有一个基础类'Powerup',然后是那个班级'Bomb','Repel'和'Wall'的3个孩子。

在基类中,我想获取派生类类型,以便我可以将其作为方法参数传递。

在那一刻我通过使用这样的代码来解决这个问题:

if (this is BombPowerup)
   AddComponent<BombPowerup>();
else if (this is RepelPowerup)
   AddComponent<RepelPowerup>();
else if (this is WallPowerup)
   AddComponent<WallPowerup>();

但它并不是真正可扩展的。我知道我可以创建一个抽象方法,并让子类自己完成每一行,但我想知道一个我可以在基类中使用的解决方案,以便学习。

感谢。

编辑: AddComponent方法定义如下

void AddComponent<T>() where T : Powerup

1 个答案:

答案 0 :(得分:1)

你可以使用反射来做到这一点:

var method = typeof(Powerup).GetMethod("AddComponent").MakeGenericMethod(this.GetType());
method.Invoke(this, new object[]);

或者你可以在基类中添加泛型类型参数并使用它来调用AddComponent

public abstract class Powerup<T> where T : Powerup
{
    private void AddSelf()
    {
        this.AddComponent<T>();
    }
}