But*_*ass 0 .net c# inheritance
假设我有一个名为 的类SuperClass和一个名为 的类SubClass。 SubClass延伸自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)
这是可行的,但当某些东西正常工作时我总是非常怀疑(特别是在第一次尝试时)。我想确保这是做我想做的事情的最佳方式(最安全、最易读、正确)。
我认为你只是在寻找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
警告一句:在执行时检查类型的需要通常有点设计味道。考虑一下是否有其他方法可以实现您的目标。有时有(例如,通过在基类中引入新的虚拟或抽象成员),有时则没有……但这总是值得考虑的。