2017-09-04 4 views
0

내가 오류 메시지 "암시 적 방법 ToViewDocument에 'The.Right.Namespace.SpecificT'를 입력하는 유형 'SpecificT'에서 변환 할 수 없습니다를 얻을.C가 입력하는 'T'

.

그것은이 방법으로 나는 형 SpecificT을 재정의하고있어 보인다

나에게 문제 제공하는 방법입니다 :

public override SpecifiedT 
ToViewDocument<SpecifiedT>(XmlEntity entity, DocKey docKey) 
    { 
     switch (docKey.IdArchive) 
     { 
      case IdArchive.A: 
       return ToAViewData((XmlDocA)entity, docKey) //error at this line; 
      default: 
       return ToBViewData((XmlDocB)entity, docKey) //error at this line; 
     } 
    } 

private SpecifiedT ToAViewData(XmlDocMassima entity, DocKey documentKey) 
    { 
     SpecifiedT result = new SpecifiedT(); 
     //map result on entity result 
     //... 
     return result; 
    } 

그 기능은 기본 클래스를 오버라이드 (override) '을 방법 :

,

는 또한 SpecifiedT 컴파일러 당신은 일반적인 방법을 무시하고 형식 매개 변수를 지정할 수 없습니다 T.

+0

포함하는 클래스 정의는 어떤 모양입니까? –

+0

'SpecifiedT'는 실제 클래스입니까? 아니면 형식 매개 변수로 사용 하시겠습니까? –

+0

'ToViewDocument'에서'SpecifiedT'는 타입 매개 변수이지만'ToAViewData'에서 구체적인 클래스 인 것처럼 보입니까? 그렇다면'ToViewDocument '를 호출 할 때'SpecifiedT'를 선택하는 클라이언트이기 때문에 이것은 결코 작동하지 않을 것입니다. 'ToViewDocument (엔티티, docKey)'. – Lee

답변

3

의 서브 클래스로 SpecifiedT을 인식 할 수없는 이유 T는 내가 이해할 수없는 확장합니다. 포함하는 클래스에 type 매개 변수를 추가 할 수 있습니다. 그런 다음 클래스를 구현하면 type 매개 변수가 구체 유형으로 설정됩니다.

abstract class Container<T> 
    where T : ViewDocumentDto, new() 
{ 
    public abstract T ToViewDocument(XmlEntity entity, DocKey documentKey); 
} 

class SpecificContainer : Container<SpecificViewDocumentDto> 
{ 
    public override SpecificViewDocumentDto ToViewDocument(XmlEntity entity, DocKey documentKey) 
    { 
    } 
}