C# 将派生类作为基泛型类返回
我正在C#上写unity脚本。我有我的基础课: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
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
需要一个类型参数,该参数可以是泛型(第一种解决方案)或固定型(第二种解决方案)。