我有个设计问题。我的项目有以下界面-
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。我如何做到这一点,以保持代码向后兼容以及支持新调用?
编辑:更新代码以修正反映我所面临的实际问题。
谢谢
发布于 2016-03-24 19:04:14
创建一个包含新方法的新接口ITest2,要求用户开始实现它。将ITest标记为过时,这样他们就会收到警告。
实现两个重载的Initialize,一个采用ITest,另一个使用ITest2。如果test或test2不是null,则更改方法以相应地执行操作。
test?.SayHello();
string result = test2?.SayHello("some string");不是很好,但考虑到您列出的约束条件,您可能只能做到最好的。
https://stackoverflow.com/questions/36207818
复制相似问题