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-我知道。但是哪个对象通过typeof(object)返回?因为类型类本身是抽象的,所以它也应该是从System.Type派生的类型。这种类型的名字是什么?
答案 0 :(得分:0)
.NET运行时实现了非虚拟方法Object.GetType()
。它返回被调用对象的类型信息。
返回的Type
的实际实现是实现细节,但是.NET运行时将返回从System.Type
派生的类型,即System.RuntimeType
。另请参见What's the difference between System.Type and System.RuntimeType in C#?。
关于您的编辑:
哪个对象由
typeof(object)
返回?
typeof(T)
被编译为Type.GetTypeFromHandle()
,该方法返回的Type
派生类型再次是实现细节。
我只想知道如果类型对象是抽象类,那么如何创建类型对象?
不能。 mscorlib
库包含public abstract class System.Type
继承的public abstract class System.TypeInfo
,而internal class RuntimeType
继承了public Type GetType()
{
var typeInfo = new RuntimeType();
// set some properties
return typeInfo();
}
。因此在内部,CLR会执行以下操作:
RuntimeType
并且由于Type
继承自wrapper.instance()
,因此可以从该方法返回该类型的实例。
答案 1 :(得分:0)
b是否指向堆上的类型对象?
是的,因为System.Type是引用类型,所以它总是分配在堆上。
如何为抽象类创建TYPE对象?
var t = typeof(MyAbstractClass);
答案 2 :(得分:-1)