2014-09-28 1 views
1

내 솔루션에는 C1, C2, C3 등 많은 클래스가 모두 상속되는 클래스가 있습니다 일반적인 추상 기본 클래스 CB에서특정 기본 클래스/인터페이스 (특정 형식이 아닌)에서 파생 된 속성을 구현하도록 클래스를 강제로 구현하는 방법

또한 대응 C 클래스에 대한 데이터 소스로서 작용 D3 등 클래스 D1, D2의 수있다 (예컨대 C1 대한 데이터 소스 타입 D1 등의 로컬 속성이다). D 클래스는 모두 공통 추상 기본 클래스 DB에서 상속하지만 구현은 다릅니다 (상속 된 속성과 상속되지 않는 속성 모두 & 메서드는 C 클래스에서 사용함).

지금, 나는 모든 C 클래스 (즉 CB에서 파생하는) 는 "데이터 소스"속성을 구현해야하는 규칙 및 DB에서 파생되어야합니다이 속성의 유형을 부과합니다. 내 초기 아이디어

이 작업을 수행했다 :

public abstract class CB 
{ 
    protected abstract DB DataSource { get; set; } 

    etc. 
} 

그러나, 이것은 C 클래스에서 오버라이드 (override) DataSource 속성이 유일한 유형 DB하지 DB에서 파생 된 유형이 될 수 있다는 것을 의미한다.

내 규칙을 어떻게 적용 할 수 있습니까? 이상적으로는 CBDB은 추상적 인 기본 클래스로 유지됩니다 (각각 C 클래스와 D 클래스가 상속 받기를 바라는 비 추상적 속성과 메소드가 있기 때문에).하지만 필요한 경우 인터페이스로 변환 될 수 있습니다. 그러나 나는 그렇게한다면 똑같은 문제가 있다고 생각합니다.

답변

4

당신은 제네릭 클래스를 찾고 : 내가 처음 코드를 이해

public class C1 : CB<D1> 
{ 
    protected override D1 DataSource { get; set; } 
} 
+0

하지만, 2에 대한 당신이 의미하지 않습니다 : 이제

public abstract class CB<T> where T : DB { protected abstract T DataSource { get; set; } etc } 

, C1는 다음과 같이 정의한다 : C1은 다음과 같이 정의해야합니다. public class C1 : CB {protected override DataSource {get; 세트; }} – Laurence

관련 문제