首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >兼容地使用接口进行后向兼容

兼容地使用接口进行后向兼容
EN

Stack Overflow用户
提问于 2016-03-24 18:47:34
回答 1查看 46关注 0票数 1

我有个设计问题。我的项目有以下界面-

代码语言:javascript
复制
interface ITest
{
    void SayHello();
}

它由这个类由每个客户端实现-

代码语言:javascript
复制
class TestImpl : ITest
{
    public void SayHello()
    {
        Console.WriteLine("Hello!");
        Console.ReadLine();
    }
}

现在这个接口已经使用了很长一段时间了,有很多客户端使用这段代码。

代码语言:javascript
复制
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的编写方式。我想将名称作为参数传递给函数并返回用户响应,它应该如下所示-

代码语言:javascript
复制
string SayHello(string name);

我不想更改库中提供的API。我如何做到这一点,以保持代码向后兼容以及支持新调用?

编辑:更新代码以修正反映我所面临的实际问题。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-24 19:04:14

创建一个包含新方法的新接口ITest2,要求用户开始实现它。将ITest标记为过时,这样他们就会收到警告。

实现两个重载的Initialize,一个采用ITest,另一个使用ITest2。如果testtest2不是null,则更改方法以相应地执行操作。

代码语言:javascript
复制
 test?.SayHello();
 string result = test2?.SayHello("some string");

不是很好,但考虑到您列出的约束条件,您可能只能做到最好的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36207818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档