我已经看到我在维护的一些代码中完成了两个,但不知道区别.有吗?
让我补充一点,myCustomer是Customer的一个实例
在您的情况下,两者的结果完全相同.它将是您的自定义类型System.Type
.这里唯一真正的区别是,当你想从你的类的实例中获取类型时,你会使用GetType
.如果你没有实例,但你知道类型名称(只需要实际System.Type
检查或比较),你会使用typeof
.
编辑:让我补充说,调用GetType
在运行时得到解决,而typeof
在编译时解析.
GetType()用于在运行时查找对象引用的实际类型.由于继承,这可能与引用该对象的变量的类型不同.typeof()创建一个Type文本,它具有指定的确切类型,并在编译时确定.
是的,如果您有来自Customer的继承类型,则会有所不同.
class VipCustomer : Customer { ..... } static void Main() { Customer c = new VipCustomer(); c.GetType(); // returns typeof(VipCustomer) }
对于第一个,您需要一个实际的实例(即myCustomer),对于第二个,您不需要
typeof(foo)在编译期间转换为常量.foo.GetType()在运行时发生.
typeof(foo)也直接转换为其类型的常量(即foo),因此这样做会失败:
public class foo { } public class bar : foo { } bar myBar = new bar(); // Would fail, even though bar is a child of foo. if (myBar.getType == typeof(foo)) // However this Would work if (myBar is foo)