Как уменьшить оператор switch при реализации интерфейса на языке C#
Привет Эксперты,
Пожалуйста, помогите мне найти правильный способ удалить оператор switch, когда интерфейс реализуется по количеству классов.
public enum TestClass { Test1, Test2, Test3, Test4 } public interface ITest { void Add(); } public class Test1 : ITest { public void Add() { Console.WriteLine("I am Test1"); } } public class Test2 : ITest { public void Add() { Console.WriteLine("I am Test1"); } } public class FindObject { public ITest GetObject(TestClass testClass) { switch (testClass) { case TestClass.Test1: return new Test1(); case TestClass.Test2: return new Test2(); case TestClass.Test3: return new Test3(); case TestClass.Test4: return new Test4(); default: return new Test1(); } } }
I выше кода у нас есть интерфейс ITest и реализован Test1,Test2....Test4..to создайте объект этих классов во время выполнения у нас есть метод GetObject use Switch statement, но я не хочу &использовать оператор switch.Поэтому я попробовал этот подход.
Что я уже пробовал:
Я использовал следующий подход, пожалуйста, предложите, лучше это или нет.
public enum TestClass { Test1, Test2, Test3, Test4 } public interface ITest { void Add(); } public class Test1 : ITest { public void Add() { Console.WriteLine("I am Test1"); } } public class Test2 : ITest { public void Add() { Console.WriteLine("I am Test1"); } } public class Test { Dictionary<TestClass, ITest> dicToTest = new Dictionary<TestClass, ITest>(); public void RegisterClass() { dicToTest.Add(TestClass.Test1, new Test1()); dicToTest.Add(TestClass.Test2, new Test2()); dicToTest.Add(TestClass.Test3, new Test3()); dicToTest.Add(TestClass.Test4, new Test4()); } public ITest GetObject(TestClass testClass) { return dicToTest[testClass]; } }
В приведенном выше подходе мы регистрируем весь класс В словаре, а во время выполнения получаем объект класса на основе перечисления.
Но проблема с таким подходом
1)Когда мы регистрируем класс В словаре, мы должны создать новый объект (новый Тест1())
это мы едим память времени регистрации. Есть ли другое решение для решения этой проблемы?.
2) Существует ли какой-либо общий способ решения этой проблемы?
3) я не использовал никакой фреймворк зависимостей.
Er. Dinesh Sharma
Есть ли другой способ решить эту проблему?