1

作为一名将自己介绍给 C# 的 Java 程序员(初学者),我发现您可以重新抽象出一个已经实现的方法(来自此答案的代码)

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)?这不违反开放/封闭原则吗?

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

4

1 回答 1

2

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

假设您仍在使用良好的面向对象设计,我认为这样做没有任何问题。只要确保您不会意外地弄乱第一个具体类中的原始功能(D在这种情况下)。这是我要注意的唯一问题。

关于您切换到 C#,我想您很快就会爱上 .NET,并想知道您是如何离开它的!

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

于 2015-08-29T03:16:03.903 回答