使用接口向后兼容

时间:2016-03-24 18:47:35

标签: c# dll interface

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

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。我该怎么做才能保持代码向后兼容以及支持新的调用?

编辑:更新了要修复的代码,反映了我面临的实际问题。

由于

1 个答案:

答案 0 :(得分:0)

创建一个包含新方法的新界面ITest2,让您的用户开始实施它。将ITest标记为已废弃,以便他们收到警告。

实施Initialize的两个重载,一个采用ITest,另一个采用ITest2。如果testtest2不为空,请更改您的方法以采取相应措施。

 test?.SayHello();
 string result = test2?.SayHello("some string");

不是很好,但考虑到你列出的限制,你可能做的最好。