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

时间:2015-01-05 11:00:47

标签: c# generics

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

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)
    {
    }

}

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

2 个答案:

答案 0 :(得分:7)

您的类型不匹配。 SpawnableCollectible实施ISpawnable<ParametersCollectible>而非ISpawnable<SpawnableParameters>,因此广告投放失败,as运算符返回 null

答案 1 :(得分:1)

添加Selman22所说的内容:

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

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

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