Jas*_*son 2 .net oop polymorphism inheritance
我有基类BaseClass和派生类DerivedA,DerivedB和DerivedC所有的继承BaseClass.
我有另一个类,ExternalClass一个方法接受一个类型的参数BaseClass,但实际上传递了一个派生类.ExternalClass如果我想根据收到的派生类执行不同的操作,区分这些类的最佳方法是什么?
我在考虑做一件事,Select但我不确定如何做.
Meh*_*ari 18
你的设计很有可能存在缺陷.您应该考虑将该行为作为一种方法,BaseClass并在每个派生类中覆盖它.您不应该检查对象的实际类型.
也就是说,无论实际类型如何,ExternalClass都应该调用声明的方法BaseClass.由于该方法被派生类覆盖,因此将调用适当的实现.
也就是说,要检查对象是否是类型的实例或其派生类,您可以使用is运算符:
if (obj is DerivedA) // C#
If TypeOf obj Is DerivedA Then ' // VB
Run Code Online (Sandbox Code Playgroud)
如果要检查对象是否是特定类型的实例(而不是其派生类型):
if (obj.GetType() == typeof(DerivedA)) // C#
If obj.GetType() Is GetType(DerivedA) Then ' // VB
Run Code Online (Sandbox Code Playgroud)