我有两个基类BaseObject
and BaseObjectSettings
。第一个定义对象行为,第二个定义类的状态(对于序列化有用)。
如果我想创建具有特定设置的派生 BaseObject 类,那么我可以使用具有泛型类型约束的方法。
public void CreateBaseObjectInstance<T>(BaseObjectSettings baseObjectSettings) where T : BaseObject
{
var instance = pool.GetInstance<T>();
instance.Settings = baseObjectSettings;
scene.Add(instance);
}
我面临的问题是,虽然我可以将泛型类型限制为 BaseClass,但我无法将 BaseClassSettings 限制为相关的派生 BaseClass。这意味着我可以做类似的事情
CreateBaseObjectInstance<Banana>(new AppleSettings());
这看起来有点可怕。
鉴于我目前只能在将对象添加到场景之前使用相同的方法创建和初始化对象,我有什么选择?
一种方法是让所有设置类继承自generic基类。然后通用基类可以继承自BaseObjectSettings
。泛型类型参数指示此设置类适用于哪种类型的对象。
例如,对于您的AppleSettings
,
class AppleSettings: ObjectSettings<Apple> {
...
}
abstract class ObjectSettings<T>: BaseObjectSettings where T: BaseObject {}
现在,你可以改变CreateBaseObjectInstance
接受一个实例ObjectSettings<T>
反而:
public void CreateBaseObjectInstance<T>(ObjectSettings<T> objectSettings) where T : BaseObject
{
var instance = pool.GetInstance<T>();
instance.Settings = objectSettings;
scene.Add(instance);
}
如果你通过了Banana
as T
,它会期望ObjectSettings<Banana>
,阻止你给予它AppleSettings
,即ObjectSettings<Apple>
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)