>我有一个名为 Powerup
的基类和 2 个Bomb
和 Repel
的后代类。
我有一个需要调用的方法,我将对象类型作为参数传递。
public void PowerupExpired<T>() where T : Powerup {
//do stuff here
}
基类有什么方法Powerup
我可以获取子类类型并将其传递给方法?我不能使用泛型类型。传递给方法的类型必须是类型 Powerup
现在,我正在使用以下方法在Powerup
课上四处走动:
if (this is BombPowerup)
PowerupManager.PowerupExpired<BombPowerup>();
else if (this is RepelPowerup)
PowerupManager.PowerupExpired<RepelPowerup>();
//etc etc
虽然这并不整洁或可扩展。
编辑:
我忘了补充。我不能拥有泛型类型的原因是因为我将继续使用 Unity GetComponent<T>()
方法,该方法使用 PowerupExpired
中的参数类型传递,它不接受泛型类型。
如果使用泛型方法的唯一原因是使用泛型 unity 方法,请不要使用泛型统一方法。
GetComponent(Type t)
还有另一种方法,您可以在其中传入类型(它实际上更健壮,例如,您可以传入接口而不是从组件继承的类)。
您的代码看起来(如下所示):
public void PowerupExpired(PowerUp p)
{
PowerUp powerUpComponent = GetComponent(p.GetType());
}
哪里
class BombPowerup : Powerup
{}
和
class RepelPowerup : Powerup
{}
大概是
class Powerup : Component
{}
你的意思是像下面这样吗?我真的不明白你到底想要什么,但我试了一下。
使道具成为抽象类,只是所有其他道具的基类。
public abstract class Powerup
{
// common behaviour for all powerups
}
然后,每种道具都将从这个基类继承。
public class BombPowerup : Powerup
{
// specific behaviour
}
声明 PowerupExpire 方法,以便它采用参数。
public void PowerupExpired<T>(T param) where T : Powerup
{
// for example print a type of an argument
Console.WriteLine(param.GetType().Name);
}
试试吧。
PowerupExpired(new BombPowerup());
从你的代码来看,它看起来很像你想在PowerupExpired
中做不同的事情,这取决于它是炸弹还是排斥。那么为什么不有两种方法呢?