如果我有这样一个类:-
static class Foo {
public static void Bar<T>(T item) { Console.WriteLine(item.ToString(); }
}
我知道在这个例子中使用T是不必要的,因为所有类型都有ToString()等方法-这只是一个人为的例子。我更感兴趣的是在引擎盖下面发生的事情,具体来说是以下内容:
Foo.Bar("Hello");
Foo.Bar(123);
Foo.Bar(new Employee("Isaac"));
我大致理解具象化,即如果您创建一个泛型类的不同类型,例如:
List<Int32>
List<String>
List<Employee>
等等编译时(或运行时)我们最终会得到三种实际的具体类型,每个泛型参数都有一个。在我的第一个例子中,方法调用是否也适用于这个规则,即我们仍然只有一个类Foo,但是有三个重载的Bar方法,分别为String,Int32和Employee?
T
是不必要的。但是有一个很好的理由:如果T
是值类型,那么就不会出现装箱。这很好。因此,在没有where T : something
约束的情况下,即使没有约束,使用T
类型参数(而不仅仅是object
)也是有原因的。 - Jeppe Stig Nielsen