2012-12-03 250 views
2

我有一個類中的DLL我想繼承這個類在我下面的類繼承泛型類

public abstract class WidgetBuilderBase<TViewComponent, TBuilder> 

我上網淨看起來如下

// 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> : 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> 
    { 

    }