C#重新抽象是否违反了开放/封闭原则?

时间:2015-08-29 02:40:16

标签: c# open-closed-principle

作为一名Java程序员(初学者)向C#介绍自己,我发现你可以重新抽象一个已经实现过的方法(来自this answer的代码)

public class D
{
    public virtual void DoWork(int i)
    {
        // Original implementation.
    }
}

public abstract class E : D
{
    public abstract override void DoWork(int i);
}

public class F : E
{
    public override void DoWork(int i)
    {
        // New implementation.
    }
}

我知道这不会使D类中的原始实现完全不可用,只能通过子类化E(重新抽象方法的类)将其子类化为D的子类,因此不应该如果D类正在生产中,会导致任何实际问题。

但是,我发现自己在想,这不是修改D类的合同,它没有指定子类必须覆盖DoWork(int i)吗?这与open/closed principle不相反吗?

请注意我没有任何实际甚至理论代码被破坏,请记住我只是从C#开始,所以我可能会遗漏一些东西。

1 个答案:

答案 0 :(得分:2)

代码实践在不同的编程语言中基本保持不变,例如C#和Java。

假设您仍在使用良好的面向对象设计,我认为没有任何问题。只要确保你不小心弄乱了第一个具体类(在这种情况下为Date Start End 10/1/2015 09:00 12:00 10/1/2015 13:00 15:00 10/1/2015 15:30 17:00 10/2/2015 09:00 12:00 10/2/2015 13:00 17:00 )中的原始功能。这是我唯一需要注意的问题。

关于你切换到C#,我想你会很快爱上.NET,并想知道你如何没有它!

祝新语言好运。希望这有助于:)