Отказ от ответственности: теоретический вопрос
Новое ограничение указывает, что любой аргумент типа в объявлении универсального класса должен иметь открытый конструктор без параметров.
Источник: http://msdn.microsoft.com/en-us/library/sd2w2ew5(v=vs.80).aspx
Что если бы я хотел, чтобы в моем универсальном классе вместо этого был защищенный конструктор без параметров?Например, если я хочу написать класс Singleton
, который я «присоединяю» к другим классам, чтобы сделать их Singleton
s, я не хочу, чтобы производные классы были инстанцируемыми - все должно проходить через свойство .Instance
.
internal class Singleton<T> where T : new()
{
public static T Instance { get; private set; }
static Singleton()
{
Singleton<T>.Instance = new T();
}
}
internal class OnlyOneOfMe : Singleton<OnlyOneOfMe>
{
protected OnlyOneOfMe()
{
}
}
Таким образом, Singleton<T>
может создать единственный экземпляр класса OnlyOneOfMe
, но больше ничего не может (если это не подкласс).
"Чтоесли универсальный родительский класс может получить доступ к защищенным членам универсального типа? "