哪种方法是获取类型的首选方式?
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。
查看此问题以获取更好的示例。
typeof
无法用于实例,因此typeof(x)
会无法编译。 - Romain VerdierGetType是Object上的一个虚方法 - 这意味着在给定一个类的实例时,可以检索相应的Type对象。
typeof是C#操作符 - 它用于执行编译时查找,即在给定表示类名的符号的情况下,检索其对应的Type对象。
if (typeof(String) == "test".GetType())
并不完全相同,问题出现在使用继承时。
I.e.:
WebPage1
继承自Page
,而Page
又继承自Object
,所以如果你尝试使用(new WebPage1()).GetType() == typeof(object)
进行测试,结果会返回false,因为这两个类型是不同的。但是当你使用is
运算符进行测试时,结果会返回true。
((new WebPage1()) is object)
是true,因为(new WebPage1())
是一个WebPage1
类型的对象,同时也是一个Page
和object
。
尽管类型可能不同,但is
检查的是你是否可以安全地将其转换为该类型。