[英]Returning derived class as base generic class
我在C#上編寫統一腳本。 我有我的基類:
BaseMonoBehavior<T> : MonoBehaviour where T : BasePresenter
有些腳本擴展了這個類,fe:
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 ...
PS后來我想從游戲對象得到MyMonoBehaviour為BaseMonoBehaviour,如果這是可能的,但它是另一個問題。
由於BaseMonoBehaviour
在presenter類上是通用的,因此您也可以將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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.