我正在尝试使用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)
{
}
}
有人可以解释为什么我不能创建一个实现给定接口的对象实例,并编写正确的方法来实例化这样的对象吗?
答案 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
强制转换将始终成功。