Это проект библиотеки классов aspnetcore. У меня есть интерфейс
public interface ITest
{
string TestMethod(string name);
}
и класс, который реализует интерфейс
public class Test : ITest
{
public virtual string TestMethod(string name)
{
return "hello " + name;
}
}
, чтобы доказать, что это работает, у меня есть консольное приложение. где я делаю простой вызов
using TestProject.Test;
public class Tester
{
public void TestMethod()
{
var testClass = new Test();
Console.WriteLine(testClass.TestMethod("John")); // Print "hello John"
}
}
Теперь я создал новый проект, также из библиотеки классов aspnetcore, импортировал первый проект и хочу перезаписать метод
using TestProject.Test;
public class TestOverwritten : Test
{
public override string TestMethod(string name)
{
return "(overwritten) hello " + name;
}
}
Мой вопрос: как я могу сделать вызов этого перезаписанного метода без необходимости изменять вызов из консольного приложения? возможно? Если так, есть ли концепция, которая определяет, что я хочу делать? (это будет Io C, или, может быть, инкапсуляция?)
using TestProject.Test;
public class Tester
{
public void TestMethod()
{
var testClass = new Test(); // I assume this line should be different ... but how?
Console.WriteLine(testClass.TestMethod("John")); // This should print "(overwritten) hello John"
}
}
, когда я говорю "без необходимости изменять вызов из консольного приложения" Я имею в виду, что создание объекта "var testClass = новый тест (); " быть достаточно обобщенным c, чтобы его не нужно было изменять, но при этом следует понимать, что вам больше не нужно искать реализацию метода для класса «Test», а для класса «TestOverwritten». Возможно, через файл конфигурации, который читает классы, которые реализуют интерфейс? таким образом, вы можете изменить файл конфигурации (от «Test» до «TestOverwritten»), и вам не придется изменять все методы, которые вызывают класс «Test».