2012-12-03 5 views
2

내가상속 제네릭 클래스

// Summary: 
    //  View component Builder base class. 
    public abstract class WidgetBuilderBase<TViewComponent, TBuilder> : IHtmlString, IHideObjectMembers 
     where TViewComponent : global::Kendo.Mvc.UI.WidgetBase 
     where TBuilder : global::Kendo.Mvc.UI.Fluent.WidgetBuilderBase<TViewComponent, TBuilder> 
    { 
    } 

을 다음과 같이 내가 인터넷에서 서핑

public abstract class WidgetBuilderBase<TViewComponent, TBuilder> 

내 다음 클래스에서이 클래스를 상속 할 보이는 DLL에서 클래스를 가지고 있지만 사이트에있는 대부분의 난 만족스런 대답을 얻지 못했습니다. 대부분은 일반적인 클래스를 상속받을 수 없다고 말합니다. 왜 제네릭 클래스를 상속받을 수 없는지.

나는

public abstract class WidgetBuilderBase<TViewComponent, TBuilder> : Kendo.Mvc.UI.Fluent.WidgetBuilderBase<TViewComponent, TBuilder> 
    { 

    } 

코드

다음을 수행하려고하지만 오류 다음 날 수 있습니다.

유형 'TBuilder'가 입력 매개 변수 일반적인 유형 'TBuilder'또는 방법 'Kendo.Mvc.UI.Fluent.WidgetBuilderBase'로서 이용 될 수 없다. 'TBuilder'에서 'Kendo.Mvc.UI.Fluent.WidgetBuilderBase'로 복싱 변환 또는 형식 매개 변수 변환이 없습니다.

TViewComponent에 대해 동일한 오류가 발생했습니다. 이 문제를 해결하는 방법 ... :(

제네릭 클래스를 상속에 어떤 도움의 형태 인수를위한 몇 가지 일반적인 제약이

+1

아마도 파생 된 유형에 동일한 일반 제약 조건을 추가해야합니다 ... – horgh

+0

하지만 런타임에 동적으로 만들고 싶습니다. –

+2

동적으로하려면 어떻게합니까? 제네릭 클래스를 상속 할 때 제약 조건도 상속받습니다. – horgh

답변

1

당신은이 같은 파생 클래스를 선언해야합니다 :

public abstract class WidgetBuilderBase<TViewComponent, TBuilder> 
      : Kendo.Mvc.UI.Fluent.WidgetBuilderBase<TViewComponent, TBuilder> 
    where TViewComponent : global::Kendo.Mvc.UI.WidgetBase 
    where TBuilder : global::Kendo.Mvc.UI.Fluent.WidgetBuilderBase<TViewComponent, TBuilder> 
{ 

} 

파생 클래스에서 기본 클래스 제네릭 제약 조건을 재정의 할 수 없습니다.

1

WidgetBuilderBase<TViewComponent, TBuilder> :

where TViewComponent : global::Kendo.Mvc.UI.WidgetBase 
where TBuilder : global::Kendo.Mvc.UI.Fluent.WidgetBuilderBase<TViewComponent, TBuilder> 

당신은 하위 클래스를 선언 할 수 없습니다를, . 아마도 이러한 제약을 위반할 수있는 따라서, 당신은 너무 클래스를 자손에 적용해야합니다

public abstract class WidgetBuilderBase<TViewComponent, TBuilder> : Kendo.Mvc.UI.Fluent.WidgetBuilderBase<TViewComponent, TBuilder> 
    where TViewComponent : global::Kendo.Mvc.UI.WidgetBase 
    where TBuilder : global::Kendo.Mvc.UI.Fluent.WidgetBuilderBase<TViewComponent, TBuilder> 
    { 

    }