Страницы

Поиск по вопросам

среда, 12 июня 2019 г.

Как сделать итерацию по нескольким singleton generic классам?

Есть основной класс
class A { }
Есть шаблон для дженерик синглтонов:
class Singleton : A where T : A {
public string Name = typeof (T).ToString();
private static T instance; public static T Instance { get { return instance ?? (instance = Activator.CreateInstance()); } }
public void TestMethod() { Console.WriteLine("My name is " + Name); } }
Есть пачка классов от него унаследованных:
class Test1 : Singleton { } class Test2 : Singleton { } class Test3 : Singleton { } class Test4 : Singleton { }
Вопрос: как можно в основной программе иметь возможность всегда пробежаться по им всем и обратиться к их методу/полю/свойству? чтобы не пришлось постоянно писать такие пачки:
Test1.Instance.TestMethod(); Test2.Instance.TestMethod(); Test3.Instance.TestMethod(); Test4.Instance.TestMethod();
Или в силу того, что это получаются разные типы - это невозможно?


Ответ

Как я понял, один из путей сделать интерфейс с общими методами
interface ICommon { void TestMethod(); // ... }
синглтон класс будет таким
class Singleton : A, ICommon where T : A { ...
а в основной программе сложить в список и за счет общего интерфейса можно уже манипулировать всеми экземплярами:
List testList = new List();
testList.Add(Test1.Instance); testList.Add(Test2.Instance); testList.Add(Test3.Instance); testList.Add(Test4.Instance);
foreach (var test in testList) { test.TestMethod(); }

Комментариев нет:

Отправить комментарий