【问题标题】:Violation of OO concepts?违反面向对象的概念?
【发布时间】:2020-08-18 12:45:52
【问题描述】:

使用一个方法创建一个基类,该方法使用一个引用子类类型的 switch case。

下面这段代码是否违反了OO原则,如果是,是哪一个?

public abstract class BaseClass
{
    public BaseClass Method()
    {
        switch (this)
        {
            case DerivedClass1 s:
                return new DerivedClass1();
            case DerivedClass2 c:
                return new DerivedClass2();
            case DerivedClass3 r:
                return new DerivedClass3();
            default:
                return null;
        }
    }
}

【问题讨论】:

标签: c# oop design-principles


【解决方案1】:

您没有利用polymorphism,违反了SOLIDopen-closed principle。为每个派生类创建基类方法virtualoverride

public abstract class BaseClass
{
    public virtual BaseClass Method()
    {
        return null;
    }
}

public class DerivedClass1 : BaseClass
{
    public override BaseClass Method()
    {
        return new DerivedClass1();
    }
}

...等等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 2016-06-16
    • 1970-01-01
    相关资源
    最近更新 更多