查看超类的当前实例是否是超类中的子类的正确方法

But*_*ass 0 .net c# inheritance

假设我有一个名为 的类SuperClass和一个名为 的类SubClassSubClass延伸自SuperClass. 在 的定义中SuperClass,我有一个方法,旨在检查this类是否是 的实例SubClass

if (this.GetType() == typeof(SubClass))
    log.Info("This SuperClass is a SubClass");
else
    log.Info("This SuperClass is NOT a SubClass");
Run Code Online (Sandbox Code Playgroud)

这是可行的,但当某些东西正常工作时我总是非常怀疑(特别是在第一次尝试时)。我想确保这是做我想做的事情的最佳方式(最安全、最易读、正确)。

Jon*_*eet 5

我认为你只是在寻找is运营商

if (this is SubClass)
Run Code Online (Sandbox Code Playgroud)

特别是,如果this是 的子类的实例,这也将继续SubClass

如果您想使用 thisas SubClass,例如获取在 中声明的成员SubClass,您也应该考虑as运算符

SubClass sub = this as SubClass;
if (sub != null)
{
    // Use sub here
}
Run Code Online (Sandbox Code Playgroud)

如果您想检测这是一个确切this的实例(而不是进一步派生的类型),那么您得到的检查已经是正确的。 SubClass

警告一句:在执行时检查类型的需要通常有点设计味道。考虑一下是否有其他方法可以实现您的目标。有时有(例如,通过在基类中引入新的虚拟或抽象成员),有时则没有……但这总是值得考虑的。