2个关于TYPE对象的问题.Type对象是引用类型吗?如果这是一个抽象类,我们如何创建TYPE对象



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.Typepublic abstract class System.TypeInfo继承该CCD_13。因此,CLR在内部会做这样的事情:

public Type GetType()
{
var typeInfo = new RuntimeType();
// set some properties
return typeInfo();
}

由于RuntimeType继承自Type,因此可以从该方法返回该类型的实例。

您可以在官方文档中轻松获得有关这方面的信息。请参阅文件

类型不指向实际对象。它只获取有关对象类型的信息。

由于无法创建抽象类的实例,因此无法调用该类的GetType。

最新更新