Скажем, в первой версии моего гипотетического программного обеспечения у меня есть такой простой класс:
public Class Version1
{
public void Method1()
{
Console.WriteLine("Hello");
}
}
Во второй версии у меня есть обновление, которое требует изменения метода 1 следующим образом:
public Class Version1
{
public void Method1()
{
Console.WriteLine("Hello");
Console.WriteLine("World");
}
}
И в третьей версии у меня есть обновление, которое требует добавления еще одного метода в этот класс, например:
public Class Version1
{
public void Method1()
{
Console.WriteLine("Hello");
Console.WriteLine("World");
}
public int Method2()
{
return 7;
}
}
Теперь, насколько я понимаю принцип Open-Closed, в обоих обновлениях я нарушил этот принцип, потому что я изменил класс, который выполнял желаемую работу в первой версии моего программного обеспечения.
То, как я думаю, что это должно быть сделано, но не уверен, что правильно, выглядит так:
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;
}
}
Насколько это неправильно/правильно?