Type
对象是引用类型吗
假设我有这个代码:
String s = "AAA";
Type b = s.GetType();
b
是否指向位于堆上的类型对象?
我们如何为抽象类创建TYPE对象
再次使用此代码:
String s = "AAA";
Type b = s.GetType();
如果这是一个抽象类,s.GetType();
如何创建TYPE对象?不能创建抽象类的实例。
所以Object.GetType((方法,返回一个从System.type派生的类型,即System.RuntimeType——我理解这一点。但是哪个对象按(对象(类型返回?它应该是从System.type派生的类型,因为类型类本身是抽象的。这种类型叫什么名字?
b是否指向位于堆上的类型对象?
是的,因为System.Type是一个引用类型,所以它总是在堆上分配。
如何为抽象类创建TYPE对象?
var t=typeof(MyAbstractClass(;
非虚拟方法Object.GetType()
由.NET运行时实现。它返回被调用对象的类型信息
返回的Type
的实际实现是一个实现细节,但.NET运行时将返回一个从System.Type
派生的类型,即System.RuntimeType
。另请参阅What';s C#?中System.Type和System.RuntimeType之间的区别?。
关于您的编辑:
typeof(object)
返回哪个对象?
typeof(T)
被编译为Type.GetTypeFromHandle()
,该方法返回的Type
派生类型再次是实现细节。
我只想知道如果类型对象是抽象类,如何创建类型对象?
你不能。mscorlib
库包含public abstract class System.Type
,public abstract class System.TypeInfo
继承该CCD_13。因此,CLR在内部会做这样的事情:
public Type GetType()
{
var typeInfo = new RuntimeType();
// set some properties
return typeInfo();
}
由于RuntimeType
继承自Type
,因此可以从该方法返回该类型的实例。
您可以在官方文档中轻松获得有关这方面的信息。请参阅文件
类型不指向实际对象。它只获取有关对象类型的信息。
由于无法创建抽象类的实例,因此无法调用该类的GetType。