我不时想到的一些事情:为什么C#需要typeof运算符?编译器不知道public class Animal
只是一个类型吗?当我需要引用类型时,为什么需要指定SomeMethod(typeof(Animal))
?
答案 0 :(得分:6)
Animal
只是类型的名称,typeof(Animal
)返回实际的类型对象(System.Type
实例)。当然,可能只是让类型名称在代码中返回类型对象,但它使编译器/解析器的工作更加困难(识别类型名称何时表示typeof或其他) - 因此存在typeof
关键字。它也可以使代码更清晰。
答案 1 :(得分:4)
typeof(Class)
是将Type表示为文字的唯一方法。当你写Class.SomeField
时,你指的是静态场。当您编写typeof(Class).SomeField
时,您引用代表您班级的班级Type
的对象字段。
答案 2 :(得分:3)
没有typeof确实会引起歧义:
class foo
{
public static string ToString()
{
return "Static";
}
}
public class Program
{
private static void Main(string[] args)
{
Console.WriteLine(foo.ToString());
Console.WriteLine(typeof(foo).ToString());
}
}
foo
和typeof(foo)
并不是指同一件事,并且强迫编译器假装它们是个坏主意,即使我们忽略了这种歧义。
答案 3 :(得分:1)
对初学者的反思。当您可以检查类型本身时,可以获得许多可能性,而不仅仅是必须知道它暴露的内容,或者它根本不存在。
答案 4 :(得分:0)
typeof()允许我获取Type对象的实例,而不必拥有目标对象的实例。这反过来让我在没有实例的情况下询问有关该类的问题。
答案 5 :(得分:0)
那么,如果不使用typeof operatore,如何在不实例化类的情况下获取类的System.Type?简单,你不能:D
由于只使用System.Type可以做很多反射,所以这个算子非常方便。