我在C#上编写统一脚本。我得到了我的基础课程:
BaseMonoBehavior<T> : MonoBehaviour where T : BasePresenter
有些脚本扩展了这个类,例如:
MyMonoBehaviour : BaseMonoBehaviour<MyPresenter>
// MyPresenter extends BasePresenter
然后我有一个带有方法的类型类,它根据它的值将这些脚本作为组件添加到GameObject:
void addComponentTo(GameObject gameObject) {
if (myType == TYPE_A) {
var script = gameObject.AddComponent<MyMonoBehaviour>();
}
}
没关系,但如果我想将创建的脚本作为基类返回,我该怎么办?我想但不能写这样的东西:
BaseMonoBehaviour addComponentTo(GameObject gameObject) {
if (myType == TYPE_A) {
var script = gameObject.AddComponent<MyMonoBehaviour>();
return script;
}
return null;
}
所以,我的问题很简单 - 我怎么能这样做?我想在方法中使用一些基类方法,它调用 addComponentTo ......
P.S。之后我想从 GameObject 获取 MyMonoBehaviour 作为 BaseMonoBehaviour ,如果可能的话,但是它可以还有一个问题。
答案 0 :(得分:3)
由于BaseMonoBehaviour
在演示者类中是通用的,因此您也可以AddComponentTo
通用:
BaseMonoBehaviour<TP> AddComponentTo(GameObject gameObject) where TP : BasePresenter {
if (myType == TYPE_A) {
var script gameObject.AddComponent<MyMonoBehaviour>();
return script;
}
return null;
}
然后调用者可以按如下方式调用它:
var component = AddComponentTo<MyPresenter>(gObj);
这要求AddComponentTo
返回的所有泛型实例在您可以在调用点指定的相同类型上是通用的。
注意:如果AddComponentTo
在同一个演示者上创建通用的通用实例,您甚至可以将其设置为非通用的,如下所示:
BaseMonoBehaviour<MyPresenter> AddComponentTo(GameObject gameObject) {
if (myType == TYPE_A) {
var script gameObject.AddComponent<MyMonoBehaviour>();
return script;
}
return null;
}
并将其称为:
var component = AddComponentTo(gObj);