我有一个设计问题。我的项目中有以下界面 -
interface ITest
{
void SayHello();
}
每个客户端都由此类实现 -
class TestImpl : ITest
{
public void SayHello()
{
Console.WriteLine("Hello!");
Console.ReadLine();
}
}
现在这个界面已经使用了很长一段时间,有很多客户端使用这个代码。
class LibraryClass
{
private ITest test;
public void initialize(ITest t)
{
test = t;
}
public void Call()
{
test.SayHello();
LibraryClass2 l2 = new LibraryClass2();
l2.SayHelloAgain(test);
}
}
class LibraryClass2
{
public void SayHelloAgain(ITest test)
{
test.SayHello();
}
}
class Client
{
private ITest test;
public void Client2Method()
{
LibraryClass l = new LibraryClass();
l.initialize(new TestImpl1);
l.Call();
}
}
现在,我想改变SayHello的编写方式。我想将名称作为参数传递给函数并返回用户响应,它应该看起来像这样 -
string SayHello(string name);
我不想更改库中提供的API。我该怎么做才能保持代码向后兼容以及支持新的调用?
编辑:更新了要修复的代码,反映了我面临的实际问题。
由于
答案 0 :(得分:0)
创建一个包含新方法的新界面ITest2
,让您的用户开始实施它。将ITest
标记为已废弃,以便他们收到警告。
实施Initialize
的两个重载,一个采用ITest
,另一个采用ITest2
。如果test
或test2
不为空,请更改您的方法以采取相应措施。
test?.SayHello();
string result = test2?.SayHello("some string");
不是很好,但考虑到你列出的限制,你可能做的最好。