Iva*_*an 5 c# polymorphism inheritance open-closed-principle
假设在我假设的软件的第一个版本中,我有一个像这样的简单类:
public Class Version1
{
public void Method1()
{
Console.WriteLine("Hello");
}
}
Run Code Online (Sandbox Code Playgroud)
在第二个版本中,我进行了升级,需要对方法 1 进行如下修改:
public Class Version1
{
public void Method1()
{
Console.WriteLine("Hello");
Console.WriteLine("World");
}
}
Run Code Online (Sandbox Code Playgroud)
在第三个版本中,我进行了升级,需要向此类添加另一个方法,如下所示:
public Class Version1
{
public void Method1()
{
Console.WriteLine("Hello");
Console.WriteLine("World");
}
public int Method2()
{
return 7;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,根据我对开闭原则的理解,在两次升级中,我都违反了这一原则,因为我修改了在我的软件的第一个版本中执行所需工作的类。
我认为应该这样做,但不确定是否正确,是这样的:
public virtual Class Version1
{
public virtual void Method1()
{
Console.WriteLine("Hello");
}
}
public virtual Class Version2 : Version1
{
public override void Method1()
{
Console.WriteLine("Hello");
Console.WriteLine("World");
}
}
public Class Version3 : Version2
{
public int Method2()
{
return 7;
}
}
Run Code Online (Sandbox Code Playgroud)
这是多么错误/正确?
是的,这两种方法都违反了原则。
第一种方法改变了 的含义Method1,而不仅仅是显示Hello更多。您的第二个方法扩展了第一个版本,这是允许的,但您应该使用继承来扩展功能。
实现“封闭或开放”的方式有多种。有些使用继承来允许对实体进行修改,有些则使用接口。如果您使用接口,则第二种方法也可能被视为违规,因为它需要改进接口定义。
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |