我正在学习反思和GetType()
方法。
我注意到,当我在应用程序中定义类型并调用GetType()
方法时,它会返回对象的type(class)
。
Class1 first = new Class1();
Class2 second = new Class2();
Type firstType = first.GetType();
Type secondType = second.GetType();
Console.WriteLine(firstType.ToString());//prints Class1
Console.WriteLine(secondType.ToString());//prints Class2
在我使用Assembly.LoadFrom()
加载其他程序集并使用foreach
迭代这些类型的同时,GetType()
会返回RunTimeType
。
foreach (Type t in AddInAssembly.GetTypes())
{
if (t.IsClass && typeof(IAddIn).IsAssignableFrom(t))
{
AddInTypes.Add(t);
Console.WriteLine(t.GetType());//prints RunTimeType
}
}
发生了什么事?我的理解错了吗?任何人都可以对这种行为有所了解。
答案 0 :(得分:6)
GetType()
返回您调用它的实例的类型。
t
是一个Type
实例,因此它返回System.Type
实际上是t
的子类(通常是RuntimeType
)。
这就像写"4".GetType().GetType()
。
答案 1 :(得分:5)
在这个例子中可能会更有意义:
Class1 someObj = new Class1();
Type type1 = someObj.GetType(); // Class1
Type type2 = type1.GetType(); // RuntimeType
在第一个示例中,您使用的是Class1
和Class2
类型的对象,因此当您使用GetType()
时,它会返回代表{{1}的Type
s }和Class1
。
在第二个示例中,您使用的是Class2
类型的对象,代表Type
和Class1
。当您对这些内容使用Class2
时,会返回GetType()
(扩展RuntimeType
)。
作为进一步说明,以下是运行上述示例后每个变量的类型和内容:
Type
答案 2 :(得分:2)