Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么需要typeof?_C# - Fatal编程技术网

C# 为什么需要typeof?

C# 为什么需要typeof?,c#,C#,我一直在想:为什么C#中需要运算符类型?编译器难道不知道,公共类Animal只是一个定义上的类型吗?当我需要引用类型时,为什么我需要指定SomeMethod(typeof(Animal))。当您可以检查类型本身时,就可以使用许多可能性,而不必只知道它公开了什么,或者它是否存在。typeof(Class)是将类型表示为文本的唯一方法。当你写Class.SomeField时,你指的是静态字段。当你写typeof(Class)时,SomeField你引用ClassType对象的字段,该对象代表你的类。

我一直在想:为什么C#中需要运算符类型?编译器难道不知道,
公共类Animal
只是一个定义上的类型吗?当我需要引用类型时,为什么我需要指定
SomeMethod(typeof(Animal))
。当您可以检查类型本身时,就可以使用许多可能性,而不必只知道它公开了什么,或者它是否存在。

typeof(Class)
是将类型表示为文本的唯一方法。当你写Class.SomeField时,你指的是静态字段。当你写
typeof(Class)时,SomeField
你引用Class
Type
对象的字段,该对象代表你的类。

Animal
只是类型的名称,
typeof(Animal
)返回实际的类型对象(
System.Type
实例)。当然,可能只是让类型名在代码中返回类型对象,但这会使编译器/解析器的工作更加困难(识别类型名何时意味着typeof或其他内容)-因此存在
typeof
关键字。它还可以使代码更清晰易读。

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

那么,如果不使用typeof operator,如何在不先实例化类的情况下获得系统。类的类型?很简单,你不能:D


由于您可以仅使用System.Type执行许多反射操作,因此此运算符非常方便。

没有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)
指的不是同一件事,强迫编译器假装它们是一个坏主意,即使我们忽略了这种歧义。

是的,但问题是:为什么?@Daniel Earwicker为什么?区分静态成员和类型的成员。啊,我明白了,错过了答案的那部分,哦+1您还可以为属性命名,如类型(常见于
颜色
等),这可能会让您更加困惑。事实上。。。它要求编译器非常聪明,以便稍微缩短代码。我相信我们要找的词是“歧义”。有些情况下,
someVariable.GetType()==Animal
可能不明确。前面代码段中的
Animal
是类定义还是成员?如果未使用
typeof
,则
Animal
必须是成员。如果使用了
typeof
,那么
Animal
必须是一个类定义。不确定它是否一定是模糊的……至少在理论上是这样,但不清楚,是的。@Noldorin:请参阅我的答案,了解一个人为的强迫模糊示例。