2015-09-28 125 views
2

我有一个抽象基类通用如何从基类泛型派生泛型类?

public abstract class A<T> where T: Control 
{ 
    protected T _t { get; set; } 

    protected abstract void Method(); 

    protected A(T t) 
    { 
     _t = t; 
    } 
} 

B级从A派生类型的TreeView

public class B<T>: A<TreeView> 
{ 
    protected override void Method() 
    { 
     _t.CallSomeTreeViewMethod(); // ok! 
    } 

    public B (TreeView tree): base (tree) 
    { 

    } 
} 

如何从B级与从TreeView的派生类型派生?

public class C: B<ExtendedTreeView> 
{ 
    protected override void Method() 
    { 
     _t.CallSomeExtendedTreeViewMethod(); 
    } 

    public C (ExtendedTreeView tree): base (tree) 
    { 

    } 
} 
+0

请注意,您的类'乙的'T'参数'是不是在任何地方使用。 – Gebb

回答

4

,而不是具体类TreeView添加通用约束:

public class B<T>: A<T> where T:TreeView 
{ 
    protected override void Method() 
    { 
     _t.CallSomeTreeViewMethod(); // ok! 
    } 

    public B (T tree): base (tree) 
    { 

    } 
} 
+0

这就像将前一个类型签名的类型约束委托给类型层次结构中的另一个子类型签名。 –