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

“where t:class”与扩展方法中的常规类

  •  0
  • adinas  · 技术社区  · 8 年前

    我希望在以下两个扩展方法声明之间以及何时使用其中一个声明与另一个声明之间有技术上的区别:

    public static void DoSomething(this MyClass theObject)
    

    VS

    public static void DoSomething<T>(this T theObject) where T : MyClass
    

    例如,我知道在将它与继承自的类的对象一起使用时有区别 MyClass 但我不知道为什么。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Vladi Pavelka    8 年前

    public static List<T> DoSomething<T>(this T theObject) where T : MyClass
        => new List<T>();
    

    MyChildClass x;  // MyChildClass : MyClass
    var list = DoSomething(x); 
    // list is an instance of List<MyChildClass>, instead of List<MyClass>