2017-01-21 3 views
2

는 자료로 클래스가 인터페이스 디자인을 기반으로 :C# 일반적인 방법

public abstract class DataObjectEntityItemBase 
{ } 

파생 클래스 :

internal void FetchTabSectionDataObjectEntityByParentItem<T1>(
       ITabSectionManager dataObjectEntityContainerOwner, 
       T1 parentDataObjectEntityItem)                                
where T1 : DataObjectEntityItemBase, ISupportsTabularDataObjectEntityContainer 
{ } 

문제 코드 내가 원하는 :

public class CatalogDataObjectEntityItem : DataObjectEntityItemBase, ISupportsTabularDataObjectEntityContainer 
{ } 

이 방법을 가지고 FetchTabSectionDataObjectEntityByParentItem :

로 전화하십시오.

오류 :

Error CS0311 The type ISupportsTabularDataObjectEntityContainer cannot be used as type parameter 'T1' in the generic type or method FetchTabSectionDataObjectEntityByParentItem(ITabSectionManager, T1)'. There is no implicit reference conversion from ISupportsTabularDataObjectEntityContainer DataObjectEntityItemBase refDoeItem is variable as DataObjectEntityItemBase type.

refDoeItemDataObjectEntityItemBase의 유형 변수입니다.

+0

당신이 우리에게 관련된 모든 코드를 보여주지 않는다는 점을 제외하면 나는 오류 메시지가 꽤 분명하다고 생각 했을까? – MickyD

+0

@MickyD, 내가 전화 할 때 : "FetchTabSectionDataObjectEntityByParentItem (refDoeItem.LinkedConfigurationObject as ITabSectionManager, refDoeItem as ISupportsTabularDataObjectEntityContainer);" "refDoeItem as ISupportsTabularDataObjectEntityContainer"가 "T1 : DataObjectEntityItemBase, ISupportsTabularDataObjectEntityContainer"제약 조건과 호환되지 않는 이유는 무엇입니까? 감사. – Tim

+0

'refDoeItem'이란 무엇입니까? 아마'DataObjectEntityItemBase'가'ISupportsTabularDataObjectEntityContainer'를 구현했을 것입니다. – MickyD

답변

1

컴파일 타임 동안 제약 조건은 호출해야하는 연산자 또는 메서드가 클라이언트 코드에 의해 지정된 모든 형식 인수에 의해 지원된다는 것을 보장합니다.

경우에는 where T1 : DataObjectEntityItemBase, ISupportsTabularDataObjectEntityContainer이라는 제약 조건은 DataObjectEntityItemBase에서 인스턴스를 가져와 ISupportsTabularDataObjectEntityContainer을 동시에 구현해야 함을 의미합니다.

refDoeItem to ISupportsTabularDataObjectEntityContainer의 불필요한 전송을 수행하면이 규칙을 무시하게됩니다. 단순히 캐스트를 제거하면 모든 제약 조건이 자동으로 결정됩니다. 하지만 다른 유형으로 캐스팅해야하는 경우 (예 : refDoeItem이 개체 임)이 경우 전체 제약 조건 (CatalogDataObjectEntityItem)을 준수하는 유형으로 변환해야합니다.