C# 将派生类作为基泛型类返回

C# 将派生类作为基泛型类返回,c#,generics,unity3d,C#,Generics,Unity3d,我正在C#上写unity脚本。我有我的基础课: BaseMonoBehavior<T> : MonoBehaviour where T : BasePresenter BaseMonoBehavior:MonoBehavior,其中T:BasePresenter 一些脚本扩展了此类,例如: MyMonoBehaviour : BaseMonoBehaviour<MyPresenter> // MyPresenter extends BasePresenter my

我正在C#上写unity脚本。我有我的基础课:

BaseMonoBehavior<T> : MonoBehaviour where T : BasePresenter
BaseMonoBehavior:MonoBehavior,其中T:BasePresenter
一些脚本扩展了此类,例如:

MyMonoBehaviour : BaseMonoBehaviour<MyPresenter> 
// MyPresenter extends BasePresenter
myMonoBehavior:baseMonoBehavior
//MyPresenter扩展了BasePresenter
然后我有一个类型类和方法,它根据GameObject的值将这些脚本作为组件添加到GameObject中:

void addComponentTo(GameObject gameObject) {
    if (myType == TYPE_A) {
        var script = gameObject.AddComponent<MyMonoBehaviour>();
    }
}
void addComponentTo(游戏对象游戏对象){
如果(myType==类型A){
var script=gameObject.AddComponent();
}
}
没关系,但如果我想将创建的脚本作为基类返回,我能做什么呢?我想要但不能写这样的东西:

BaseMonoBehaviour addComponentTo(GameObject gameObject) {
    if (myType == TYPE_A) {
        var script = gameObject.AddComponent<MyMonoBehaviour>();
        return script;
    }
    return null;
}
BaseMonoBehaviour<MyPresenter> AddComponentTo(GameObject gameObject) {
    if (myType == TYPE_A) {
        var script gameObject.AddComponent<MyMonoBehaviour>();
        return script;
    }
    return null;
}
var component = AddComponentTo(gObj);
baseMonoBehavior addComponentTo(游戏对象游戏对象){
如果(myType==类型A){
var script=gameObject.AddComponent();
返回脚本;
}
返回null;
}
所以,我的问题很简单——我该怎么做?我想在方法中使用一些基类方法,它调用addComponentTo


另外,如果可能的话,我想从GameObject中获取MyMonoBehavior作为BaseMonoBehavior,但这是另一个问题。

由于
BaseMonoBehavior
在presenter类中是通用的,所以您也可以将
AddComponentTo
设置为通用的:

BaseMonoBehaviour<TP> AddComponentTo(GameObject gameObject) where TP : BasePresenter {
    if (myType == TYPE_A) {
        var script gameObject.AddComponent<MyMonoBehaviour>();
        return script;
    }
    return null;
}
这样称呼它:

BaseMonoBehaviour addComponentTo(GameObject gameObject) {
    if (myType == TYPE_A) {
        var script = gameObject.AddComponent<MyMonoBehaviour>();
        return script;
    }
    return null;
}
BaseMonoBehaviour<MyPresenter> AddComponentTo(GameObject gameObject) {
    if (myType == TYPE_A) {
        var script gameObject.AddComponent<MyMonoBehaviour>();
        return script;
    }
    return null;
}
var component = AddComponentTo(gObj);

但您的解决方案要求我在调用此函数时了解BasePresenter的具体实现,但我想从中抽象出来。我只想给我的游戏对象和它的类型一些方法。。据我所知,没有一个微妙的解决方案?@KamoSpertsian为了获取泛型类的实例,您需要提供其泛型类型参数。您可以返回非泛型的
monobhavior
,但
basemonobhavior
需要一个类型参数,该参数可以是泛型(第一种解决方案)或固定型(第二种解决方案)。