【发布时间】:2014-04-12 02:15:17
【问题描述】:
我想在我的某些 MonoBehaviour 类中添加一个 Data 对象。
所以,我创建了一个这样的抽象类:
public abstract class DataMonoBehaviour<T> : MonoBehaviour
where T : BaseData, new()
{
protected T Data;
protected DataMonoBehaviour()
{
Data = new T();
}
protected virtual T GetData()
{
if (Data == null)
return default(T);
return Data;
}
}
我的 Data 对象也有一个类(它可能是一个接口):
public class BaseData { }
还有一些派生的 Data 类,上面有属性:
public class DataA : BaseData { Property1, Property2 }
public class DataB : BaseData { Property1 }
所以现在我可以创建与 Data 对象关联的 Monobehaviours:
public class MonobehaviourA : DataMonoBehaviour<DataA> { }
public class MonobehaviourB : DataMonoBehaviour<DataB> { }
这样做是个好习惯吗?
如果我想从列表中获取所有继承自 DataMonoBehaviour(无论 T 的类型)的 MonoBehaviour。我是否必须为 DataMonoBehaviour 创建一个基类?
那么如何将退货商品转换回DataMonoBehaviour,这样我就可以这样做了:
((Cast to DataMonoBehaviour<T>)item).GetData();
返回与 DataMonoBehaviour 关联的我的 Data 对象
我不知道是否可以这样做。如果没有,有哪些可能的解决方案?
【问题讨论】:
-
我有一些话要说。在我看来,BaseClass(如您的 BaseData)应该始终是抽象的。这就是我所期望的。我也不会命名没有抽象或名称的抽象类(如您的 DataMonoBehaviour),因为它只是令人困惑。
-
您能告诉我们您将在什么环境中使用它吗?目前我看不出这有什么用,您不妨立即使用 T,您的 DataMonoBehaviour 没有任何用途(也就是说,没有看到您的其余代码)
-
@Kenneth :这是一个 Unity 项目en.wikipedia.org/wiki/Unity3D。在 Unity 中,您可以将脚本(继承自 MonoBehaviour 的类)添加到 GameObject。我想序列化我的 MonoBehaviour 的相关数据,但 MonoBehaviour 无法实现 ISerializable 接口。这就是为什么我想在我的一些 MonoBehaviour 中添加一个自定义数据类。这个数据类将是可序列化的
标签: c# generics base-class