C# 超类和子类中的反射

Ala*_*ord 0 c# reflection inheritance object system.reflection

朋友们,

鉴于这三个类:

public class MyBaseClass {
}

public class MyDerivedClass1: MyBaseClass {
}

public class MyDerivedClass2: MyBaseClass {
}
Run Code Online (Sandbox Code Playgroud)

在运行时,我将有一个类型的对象MyBaseClass(要么是MyDerivedClass2要么MyDerivedClass1)。我如何在运行时确定 ifMyBaseClassMyDerivedClass1

dkn*_*ack 5

使用is运算符。

is(C# 参考) - 检查对象是否与给定类型兼容。例如,以下代码可以确定对象是 MyObject 类型的实例,还是派生自 MyObject 的类型:

如果实例位于继承树中,则is运算符返回 true。

if (myInstance is MyDerivedClass1) 
{
    // my instance is of type MyDerivedClass1
}
Run Code Online (Sandbox Code Playgroud)

这将适用于您的示例代码。但是如果你想检查它的类型是否完全相同,你需要使用typeof()GetType()

if (myInstance.GetType() == typeof (MyDerivedClass1))
{
    // my instance is of type MyDerivedClass1
}
Run Code Online (Sandbox Code Playgroud)

更多信息