Re[4]: Вопрос по generic-ам
От: ыукпшл Россия  
Дата: 11.05.07 09:49
Оценка:
Здравствуйте, ksg71, Вы писали:
K>Вот так будет работать
K>
K>public class VipCurrentUser:HttpSessionSingleton<VipCurrentUser>
K>


Да, но тогда весь функционал работы с пользователем (поле UserName например), надо: либо засовывать в HttpSessionSingleton, тогда HttpSessionSingleton напрочь теряет свою универсальность; либо дублировать в классах VipCurrentUser и CurrentUser, т.к. VipCurrentUser с CurrentUser никак не связан.

Тут бы помогло множественное наследование, но его нет.

K>только метод инициализации инстанса в

K>
K>public class CurrentUser:HttpSessionSingleton<CurrentUser>
K>

K>должен создавать экземпляры различных юзеров (Vip или еще каких), в зависимости от каких либо условий

С этим как раз проблем нет:
public class HttpSessionSingleton<T> where T : HttpSessionSingleton<T>, new()
{
        public static T Instance
        {
            get
            {
                 if (HttpContext.Current.Session[SessionKey] == null)
                 {
                       lock (lock_obj)
                       {
                            if (HttpContext.Current.Session[SessionKey] == null)
                            {
                                    HttpContext.Current.Session[SessionKey] = new T();
                            }
                        }
                  }
                  return current;
            }
        }
}

то есть создается именно тот инстанс, тип которого был передан в дженерик. Получается как бы, что класс наследуется и от синглетрона и от самого себя (через свойство инстанс)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.