创建实现给定接口的对象的实例

Creating instance of an object which implements a given interface

我正在尝试使用 Activator.CreateInstance() 构建一个对象,但是由于某些我不知道的原因,我收到了 null。

public class SpawnManager
{

    public void CreateSpawnable<T>()
    {
        Type type = typeof(T);

        ISpawnable<SpawnableParameters> spawnable = Activator.CreateInstance(type) as ISpawnable<SpawnableParameters>;

        // the spawnable object always returns null
    }

    public void Start()
    {
        CreateSpawnable<SpawnableCollectible>();
    }

}


public class SpawnableCollectible : ISpawnable<ParametersCollectible>
{

    public void Spawn(ParametersCollectible parameters)
    {
    }

}

有人能解释一下为什么我不能创建一个像那样实现给定接口的对象实例并编写实例化这样一个对象的正确方法吗?

您的类型不匹配。 SpawnableCollectible 实现 ISpawnable<ParametersCollectible> 而不是 ISpawnable<SpawnableParameters> 因此转换失败并且 as 运算符 returns null.

补充 Selman22 所说的内容:

您可能希望将 T 限制为派生自 ISpawnable<SpawnableParameters> 的类型。 这将解决您的问题:

public void CreateSpawnable<T>() where T: ISpawnable<SpawnableParameters>
{
    //...
}

这样,客户端代码就无法使用无效类型 T 调用您的方法,并且 as 转换将始终成功。