将变量作为通用类型传递

时间:2019-06-20 21:02:09

标签: c# unity3d generic-type-argument

我正在Unity中使用C#进行练习。简要地说:我正在创建一个不能使用new关键字实例化的抽象类。因此,我正在创建一个接收Type变量作为输入的静态方法。然后,此变量用作AddComponent<T>方法的输入。在我正在处理的代码下面:

abstract class BaseClass : MonoBehaviour
{
    protected static T Create(T type) where T : SubClass
    {
        GameObject gameObject = new GameObject("MyGameObject");
        return gameObject.AddComponent<type>();
    }
}

//==================================================

class SubClass : BaseClass
{
    static new SubClass Create()
    {
        return BaseClass.Create(typeof(CharacterRed));
    }
}

但我收到此错误:

  

找不到类型或名称空间名称'T'(您是否缺少using指令或程序集引用?)

我在做什么错了?

谢谢

1 个答案:

答案 0 :(得分:0)

您不能添加以这种方式动态设置的T型。

相反,请使用没有泛型的同一版本的API

<div> <span class="text">hello world</span> </div> .text { color: red; }

完整代码:

gameObject.AddComponent(typeof(something))

OR

  abstract class BaseClass<T> : MonoBehaviour {
    protected static GameObject Create(Type type){
        GameObject gameObject = new GameObject("MyGameObject");
        return gameObject.AddComponent(type);
    }
  }