我有一个基础类'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
答案 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>();
}
}