获取基类中的 Child 类型,以作为类型参数传递给另一个方法



>我有一个名为 Powerup 的基类和 2 个BombRepel 的后代类。

我有一个需要调用的方法,我将对象类型作为参数传递。

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中做不同的事情,这取决于它是炸弹还是排斥。那么为什么不有两种方法呢?

最新更新