方法签名 - TestMethod <t>()和TestMethod(类型t)之间的区别</t>

时间:2012-10-29 16:40:03

标签: c#

以下两种方法签名之间有什么区别:

public static void test<T>()

VS

public static void test(Type t)

我知道第二个允许将类型传递给方法,但我不清楚第一个类型的做法是不同的。

3 个答案:

答案 0 :(得分:3)

使用前者,您的类型必须在编译时知道,并且您将能够在方法中使用“T”作为变量之类型的名称的替身声明或转换就像你正在编写普通代码一样。

对于后者,类型可能直到运行时才知道,但是您必须使用反射或动态对象来完成某些事情,这些事情对于通用事件来说更容易(并且类型安全)。

答案 1 :(得分:2)

第一个需要在编译时指定类型(T),并且是通用方法。

第二个允许您在运行时指定类型,并且是非泛型方法。

答案 2 :(得分:1)

第一个是通用方法。这意味着很多事情:

  • 该类型在编译时解析。您可以致电test<int>test<String>,但无法在test<t>为变量的情况下致电t

  • 由于类型是在编译时解析的,因此您可以在方法的其他部分使用此类型,例如作为返回类型,作为参数的类型或作为方法内部变量的类型。例如:

    public static T test<T>(T param) { ... }
    
    int x = test(myString);   // Causes a compile-time error