代码之家  ›  专栏  ›  技术社区  ›  matt

泛型类型中的C#多态性

  •  5
  • matt  · 技术社区  · 14 年前
    class Base
    {}
    
    class Sub : Base
    {}
    
    
    void AddNewBase(Base t, LinkedList<Base> list){ ... }
    ...
    {
    
        Sub asub = new Sub();
    
        LinkedList<Sub> asubList = new LinkedList<Sub>();
        AddNewBase(asub,asubList) // doesn't work
    }
    

    基本上,我有一个自定义的insert函数,它接受一个新项和一个列表来放置它,并且它做一些“排序”工作来找到一个好的位置来放置它。

    我想我想要的是:

    static void AddNewBase<T>(T t, LinkedList<T> list){ ... }
    

    但是用某种方式来解释T,比如:“T是基类的一个子类”

    3 回复  |  直到 14 年前
        1
  •  9
  •   dtb    14 年前

    你可以申报 Constraints on Type Parameters :

    static void AddNewBase<T>(T t, LinkedList<T> list) where T : Base { ... }
    
        2
  •  0
  •   Aliostad    14 年前

    哪里 关键字的方式相同,您不需要泛型类型。

    IComparable 可能是您在经典排序问题中需要的实现:

        static void AddNewBase<T>(T t, LinkedList<T> list) where T : IComparable
        {
            //
        }
    
        3
  •  0
  •   Bradley Smith    14 年前

    static void AddNewBase(Base t, IEnumerable<Base> list) { //... }
    

    允许你打电话 AddNewBase 用一个 LinkedList<Sub>