使用GetType()和typeof()获取Type有什么区别?
可能重复:
类型检查:typeof,GetType还是?
哪一种是获得该类型的首选方式?
只有在编译时知道该类型,并且尝试获取相应的Type
对象时,才能使用typeof()
。 (尽管类型可以是generics类型参数,例如类型参数为T
的类中的typeof(T)
。)不需要该类型的任何实例可用于使用typeof
。 typeof
的操作数始终是类型或类型参数的名称 。 它不能是变量或类似的东西。
现在将它与object.GetType()
进行比较。 这将获得它所调用的对象的实际类型。 这意味着:
一个奇怪的观点:由于拳击的工作方式, GetType
将在可空值的类型上给出意想不到的答案。 对GetType
的调用将始终涉及装箱任何值类型,包括可空值类型,并且可空值类型的装箱值是空引用或对非可空值类型的实例的引用。
GetType()在运行时工作,typeof()是编译时运算符。
所以,
// untested, schematic void ShowType(Object x) { Write(x.GetType().Name); // depends on actual type // typeof(x) won't actually compile Write(typeof(x).Name); // always System.Object } ShowType("test");
将打印System.String和System.Object。
请参阅此问题以获得更好的示例。
GetType是Object上的虚方法 – 这意味着给定一个类的实例,您可以检索相应的Type对象。
typeof是一个C#运算符 – 用于执行编译时查找,即给定表示类名的符号,为其检索Type对象。
if (typeof(String) == "test".GetType())
它不完全相同,当您使用inheritance时会出现问题。
即:
WebPage1
inheritance自Page
,而且这个也inheritance自Object
,所以如果你测试(new WebPage1()).GetType() == typeof(object)
它会返回false,因为类型不同,但是当你测试使用时is
运营商这是真的。
((new WebPage1()) is object)
为true,因为(new WebPage1())
是WebPage1
类型的对象,也是Page
和object
。
类型可能不同,但检查是否可以安全地转换为此类型。
上述就是C#学习教程:使用GetType()和typeof()获取Type有什么区别?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/956305.html