在c#中为.GetType()和Typeof()在运行时或编译时获得解析的重要性

The*_*htt 0 c# types

我最近在c#中阅读了关于.GetType()和Typeof()方法的文章.现在,我知道他们都返回了System.类型.那篇文章还表明,重要的是要知道.GetType()在运行时被解析而另一个在编译时被解析.

我想知道为什么应该考虑这个事实?考虑到两个函数的返回值是相同的,为什么我们需要知道"何时"它们得到解决?

谢谢

Jon*_*eet 9

typeof不是一种方法 - 它是一个运营商.这就是它在编译时的解决方法.它们不会做同样的事情,因为typeof你需要在编译时知道你想要的实际类型或类型参数1,而GetType你不需要.例如:

Stream x = GetStreamFromSomewhere();
Type t1 = typeof(Stream); // Always exactly System.IO.Stream
Type t2 = x.GetType();    // Never System.IO.Stream
Run Code Online (Sandbox Code Playgroud)

t2永远不会System.IO.Stream,因为那是一种抽象的类型.当我编写这段代码时,它可能是System.IO.MemoryStream,System.IO.FileStream或某种流子类甚至不存在.它是指的值所指的实际对象的类型x.这将永远是一个流的一些实物,但我们不知道,直到我们问什么类型实际上是.


1如果您正在使用typeof(T)那么在编译时该代码不知道实际类型,但它是任何特定调用的类型参数.它不使用特定对象的执行时类型.