У меня есть пара классов, которые являются одиночными, поэтому я попытался создать родительский BaseClass с помощью метода GetInstance (params) и производных классов, который должен реализовать этот метод и вернуть экземпляры theiselfs (так что у меня нет их бросать) ... поскольку они являются одиночными, метод должен быть статическим, но его нельзя разрешать статические методы. Какой был бы лучший способ кодировать его? Пример кода, что я хотел:Обратные экземпляры singleton потомков
public class Base {
public static virtual T GetInstance<T>() where T : class;
}
public class Derived {
Derived instance;
public static override T GetInstance<T>() where T : typeOf(this){
if (instance == null) {
instance = new Derived();
}
return instance;
}
}
в коде вне этого я хочу, чтобы позвонить
Derived.GetInstance().SomeDerivedMethod()
не
(Derived.GetInstance() as Derived).SomeDerivedMethod() and not
new Derived().getInstance().SomeDerivedMethod()
Я знаю, что это не хорошо, и у меня есть недостаток опыт с типом T тоже, поэтому любые советы приветствуются. благодаря
EDIT:
Или, если это возможно, каким-то образом определить метод GetInstance() в базе, так что производный класс не должен ovwerride, но он возвращает экземпляр класса, откуда он был вызван ... Derived.GetInstance() вернет экземпляр Derived
Какую цель должны этого класса? Вполне вероятно, что контейнер IoC будет более уместным. – Groo
У меня будет больше синглтонов, поэтому я хотел бы подтянуть логику создания экземпляров таким образом, чтобы статический унаследованный метод от родителя всегда мог возвращать экземпляр типа, из которого он был вызван (даже если он из потомка) – Zavael
здесь аналогичная дискуссия http://www.codeguru.com/forum/showthread.php?t=376943 и похоже, что нет возможности заставить потомка быть одиночными, похоже, что я хотел что-то странное .. :( – Zavael