2015-09-28 156 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

這就像將前一個類型簽名的類型約束委託給類型層次結構中的另一個子類型簽名。 –