繁体   English   中英

如何访问派生类实例的属性,该实例作为参数以基类的形式传递

[英]How to access the properties of an instance of a derived class which is passed as a parameter in the form of the base class

在C#中,我有一个基类和一个派生类。

我有一个将基类作为输入参数的函数

public void SomeFunction(BaseClass InstanceOfDerivedClass)

即使已将其作为基类传递,有没有办法可以访问特定于派生类的属性? 我可以使用GetType或Cast还是类似的东西?

我知道解决方案可能并不完美,但目前替代方案是针对不同的派生类多次重复执行此功能。

强制转换绝对可以解决问题,因为堆中的引用就是对该类的引用。 也许像这样:

if (InstanceOfDerivedClass is DerivedClass)

在该区块中,您可以投射它并与之交互。

但更大的问题是,您为什么需要? 如果被接受为参数的类型不是正确的类型,听起来这方法使用了错误的抽象。 这打破了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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM