Вопрос по generic-ам
От: iukpshl  
Дата: 11.05.07 07:34
Оценка:
Сразу говорю — недостатки использования таких классов в качестве синглетонов мне известны, вопрос не о них.
Есть такой класс:
public class Singleton<T> where T : Singleton<T>, new()
{
 protected static readonly object lock_obj = new Object();
 protected static T _Instance = null;
 public static T Instance
        {
            get
            {
                if (_Instance == null)
                {
                    lock (lock_obj)
                    {
                         if (_Instance == null)
                        {
                            _Instance = new T(); //ВОТ ЗДЕСЬ ПРОБЛЕМА!!! (см. далее)
                        }
                    }
                }
                return _Instance;
            }
        }
}

Наследуюсь от него:
public class DB:Singleton<DB>
{
protected string _ConnectionString = null;
public DB()
{
            _ConnectionString = ...;
}
//+Еще много-много-много методов
}

Теперь требуется создать другой класс DB (с другой _ConnectionString — все остальное то же самое):
public class UserDB:DB
{
public UserDB()
{
            _ConnectionString = ...; //ЭТОТ КОД НИКОГДА НЕ ВЫПОЛНЯЕТСЯ!!!
}
}

Т.е. происходит следующее:
1. Вызываю неявно создание экземпляра UserDB:
IDataReader dr=UserDB.ExecuteReader....;

2. В классе Singleton<T> вызывается
_Instance = new T();

НО <T> здесь — это тип DB, а не UserDB как мне надо (хотя вызов идет именно от класса UserDB)

Я понимаю, почему так происходит, подскажите как можно это реализовать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.