我最近在c#中阅读了关于.GetType()和Typeof()方法的文章.现在,我知道他们都返回了System.类型.那篇文章还表明,重要的是要知道.GetType()在运行时被解析而另一个在编译时被解析.
我想知道为什么应该考虑这个事实?考虑到两个函数的返回值是相同的,为什么我们需要知道"何时"它们得到解决?
谢谢
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)那么在编译时该代码不知道实际类型,但它是任何特定调用的类型参数.它不使用特定对象的执行时类型.
| 归档时间: |
|
| 查看次数: |
257 次 |
| 最近记录: |