为什么需要typeof?

时间:2010-06-30 13:02:34

标签: c#

我不时想到的一些事情:为什么C#需要typeof运算符?编译器不知道public class Animal只是一个类型吗?当我需要引用类型时,为什么需要指定SomeMethod(typeof(Animal))

6 个答案:

答案 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());
    }
}

footypeof(foo)并不是指同一件事,并且强迫编译器假装它们是个坏主意,即使我们忽略了这种歧义。

答案 3 :(得分:1)

对初学者的反思。当您可以检查类型本身时,可以获得许多可能性,而不仅仅是必须知道它暴露的内容,或者它根本不存在。

答案 4 :(得分:0)

typeof()允许我获取Type对象的实例,而不必拥有目标对象的实例。这反过来让我在没有实例的情况下询问有关该类的问题。

答案 5 :(得分:0)

那么,如果不使用typeof operatore,如何在不实例化类的情况下获取类的System.Type?简单,你不能:D

由于只使用System.Type可以做很多反射,所以这个算子非常方便。