作为一名将自己介绍给 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# 开始,所以我可能会在这里遗漏一些东西。