У меня вопрос дизайна. У меня следующий интерфейса в моем проекте -Работа с интерфейсами для обратной совместимости
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, представленную в библиотеке. Как я могу сделать это, чтобы сохранить код обратно совместимым, а также поддерживать новый вызов?
EDIT: Обновлен код для исправления, отражающий фактическую проблему, с которой я столкнулся.
Благодаря
Если вы управляете кодом для интерфейса, просто добавьте строку метода SayHello (имя строки); для ITest. – user469104
Нет, я не хочу. Каждый клиент имеет собственную реализацию интерфейса – Fox
. Это делает его очень другим, хотя –