gpt4 book ai didi

c# - 返回派生类作为基泛型类

转载 作者:行者123 更新时间:2023-11-30 15:56:30 25 4
gpt4 key购买 nike

我正在使用 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...

附言之后,如果可能的话,我想从 GameObject 中获取 MyMonoBehaviour 作为 BaseMonoBehaviour,但这是另一个问题。

最佳答案

由于 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);

关于c# - 返回派生类作为基泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46664923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com