如何访问以基类形式作为参数传递的派生类实例的属性
本文关键字:参数传递 派生 属性 实例 何访问 访问 基类 | 更新日期: 2023-09-27 18:09:53
在c#中,我有一个基类和一个派生类。
我有一个函数,它的基类作为输入参数
public void SomeFunction(BaseClass InstanceOfDerivedClass)
是否有一种方法可以访问特定于派生类的属性,即使它已作为基类传递?我能使用GetType或Cast之类的吗?
我知道解决方案可能不是很优雅,但目前的替代方案是为不同的派生类多次重复此函数。
强制类型转换肯定能达到这个目的,因为堆中的引用就是对那个类的引用。比如:
if (InstanceOfDerivedClass is DerivedClass)
在那个块中你可以cast它并与它交互
但更大的问题是,你为什么需要这样做?如果接受作为参数的类型不是正确的类型,那么听起来这个方法使用了错误的抽象。这打破了Liskov代换,看起来是重构设计的主要候选。(我们对这方面的了解还不够多。)
你可以这样做(坏方法):
public void SomeFunction(BaseClass instanceOfDerivedClass)
{
DerivedClass derived = null;
if(instanceOfDerivedClass is DerivedClass)
{
derived = instanceOfDerivedClass as DerivedClass;
// Do stuff like :
int prop = derived.DerivedProperty;
}
}
或者,正如Eric建议的(好方法):
public void SomeFunction(BaseClass instanceOfDerivedClass)
{
DerivedClass derived = instanceOfDerivedClass as DerivedClass;
if(derived != null)
{
// Do stuff like :
int prop = derived.DerivedProperty;
}
}