나는 2 개의 일반 클래스, BaseComponent
클래스 및 BaseManager
클래스가 있습니다.원형 제네릭 형식 매개 변수
둘 다 추상적이어서 구체적인 내용을 나타냅니다.
public abstract class BaseManager<T> where T : BaseComponent<?>
public abstract class BaseComponent<T> where T : BaseManager<?>
BaseManager
내가 그것을 일반적인 만들고 싶어 왜 BaseComponents의 목록을 가지고, 그래서 PhysicsManager : BaseManager<PhysicsComponent>
는 PhysicsComponents
의 목록을 가질 것이다.
나는 BaseComponent
에서 파생 된 클래스가 적절한 관리자에게 '연결'되기를 원하기 때문에 BaseComponent
이 일반이기를 원합니다 (아니면 오히려 필요하다고 생각합니다). 이상적으로 나는 파생 된 구성 요소 당 생성자를 작성해야하므로 전달 된 구체 관리자 클래스에 추가 할 수 있습니다. 이상 적으로 나는 추상을 취하는 생성자를 갖고 싶다 BaseManager
클래스.
어떻게 이러한 종류의 순환 종속성을 관리 할 수 있습니까?
순환 의존성을 피하기 위해 재 설계하는 것이 좋습니다. 예를 들어,'BaseComponent'를 비 제네릭으로 만드십시오. 그것은 'IManager'에 의존해야합니다. 'BaseManager' –
에서'BaseComponent'에서'TComponent'로 형변환을 넣으십시오. Jon이 지적한 것처럼 조금 냄새가 난다는 것에 동의하지만 꽤 따르지는 않습니다. 'BaseComponent'가'IManager'에 의존한다면 어떻게'BaseComponent'의 파생 된 모든 클래스가 올바른 구체적인'IManager' 구현을 받아 들인 생성자를 갖도록할까요? 그러면 관리자의 목록에 추가 할 수 있을까요? 너는 시간이 있다면, 나는 대답을 자세히 고맙게 생각한다. –