c# - 如何从基泛型类派生泛型类?

标签 c# generics inheritance

我有一个基本的抽象泛型类

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)
    {

    }
}

最佳答案

代替具体类TreeView添加通用约束:

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

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

    }
} 

关于c# - 如何从基泛型类派生泛型类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32824911/

相关文章:

c# - 局部变量作用域违规,C#?

C++ 单例模板类使我的程序崩溃

c++ - 多级私有(private)和公共(public)继承 - 不寻常的访问

c++ - 动态数组和类继承

c# - Mono 上奇怪的 WeakReference 行为

c# - ILOnly = 0 是否表示 C++/CLI?

c# - 如何在 lightswitch 中为组合框设置默认值

c# - 覆盖子类中的通用 IEnumerable 接口(interface)

java - 如何封装未经检查的强制转换以仅允许未经检查的泛型类型转换?

generics - 通用 Dart : '(BuildContext, String) => Padding'类型不是 '(BuildContext, dynamic) => Widget'类型的子类型