圆形的泛型类型参数 [英] circular generic type parameters
问题描述
我有2个普通班, BaseComponent
类和 BaseManager
类。
I have 2 generic classes, a BaseComponent
Class, and a BaseManager
class.
他们都是抽象的,旨在进行混凝土。
They're both abstract and are intended to be made concrete.
public abstract class BaseManager<T> where T : BaseComponent<?>
public abstract class BaseComponent<T> where T : BaseManager<?>
BaseManager
有BaseComponents的列表,其中就是为什么我希望把它通用的,所以 PhysicsManager:BaseManager< PhysicsComponent>
将有 PhysicsComponents
的列表。
BaseManager
has a list of BaseComponents, which is why i want to make it generic, so a PhysicsManager : BaseManager<PhysicsComponent>
would have a list of PhysicsComponents
.
我想(或者说,想我需要) BaseComponent
是通用的,因为我只希望从派生类 BaseComponent
将连接到适当的经理。理想情况下,我不希望有写每个派生的组件构造只是这样我就可以将其添加到具体管理器类过去了。理想我想有一个构造函数抽象 BaseManager
类。
I want (or rather, think i need) BaseComponent
to be generic because i only ever want classes derived from BaseComponent
to be 'attached' to their appropriate manager. Ideally i don't want to have to write a constructor per derived component just so i can add it to a passed in concrete manager class. Ideally i want to have a constructor that takes the abstract BaseManager
class.
我如何管理这种通告?依赖
How can i manage this kind of circular dependency?
推荐答案
这听起来像你可能想有两个泛型类型参数:
It sounds like you might want to have two generic type parameters:
public abstract class BaseManager<TComponent, TManager>
where TComponent : BaseComponent<TComponent, TManager>
where TManager : BaseManager<TComponent, TManager>
public abstract class BaseComponent<TComponent, TManager>
where TComponent : BaseComponent<TComponent, TManager>
where TManager : BaseManager<TComponent, TManager>
是的,臭 - 但是这是那种我在的 Protocol Buffers的
这样,那么你就必须:
public class PhysicsManager : BaseManager<PhysicsComponent, PhysicsManager>
public class PhysicsComponent : BaseComponent<PhysicsComponent, PhysicsManager>
这篇关于圆形的泛型类型参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!