作为一名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#开始,所以我可能会遗漏一些东西。
答案 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,并想知道你如何没有它!
祝新语言好运。希望这有助于:)