我想在我的一些MonoBehaviour课程中添加 数据 对象。
所以,我创建了一个这样的抽象类:
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;
}
}
我还有一个用于 数据 对象的课程(可能是一个界面):
public class BaseData { }
一些派生了 数据 的类,其中包含属性:
public class DataA : BaseData { Property1, Property2 }
public class DataB : BaseData { Property1 }
现在我可以创建与 数据 对象相关联的Monobehaviours:
public class MonobehaviourA : DataMonoBehaviour<DataA> { }
public class MonobehaviourB : DataMonoBehaviour<DataB> { }
这样做是好的做法吗?
如果我想从列表中获取从DataMonoBehaviour(无论是T的类型)继承的所有MonoBehaviour。我是否必须为DataMonoBehaviour创建基类?
然后我如何将退货项目转换回DataMonoBehaviour
,以便我可以这样做:
((Cast to DataMonoBehaviour<T>)item).GetData();
返回与DataMonoBehaviour相关联的 数据 对象
我不知道是否可以这样做。如果没有,有哪些可能的解决方案?
答案 0 :(得分:0)
这样做是否是一种好习惯?
我认为这是解决问题的可能方法。我也会这样做。
如果想从列表中获取从DataMonoBehaviour(无论是T的类型)继承的所有MonoBehaviour。我是否必须为DataMonoBehaviour创建基类?
我个人会使用接口。然后你可以这样做一些想法...
public interface IDataMonoBehaviour
{
BaseData GetData();
}
并遍历列表...
foreach(var monoBehaviour in monoBehaviourList)
{
var behaviour = myBehaviour as IDataMonoBehaviour;
if (behaviour != null)
{
// inherites from IDataMonoBehaviour
}
}
然后我如何将退货项目转换回DataMonoBehaviour,以便我可以做到这一点......
以下情况怎么样?
((IDataMonoBehaviour)item).GetData();