Я не уверен на 100%, что вы получаете, новая переменная Singleton1 (в том смысле, что она создает еще один синглтон) на самом деле невозможна, по определению того, что Синглтон должен применять для вашей системы. Возможно, новая переменная, которая указывает на одноэлемент, может сделать столько, сколько вы хотите указать на экземпляр.
Обычно Singleton1.Instance просто возвращает ссылки на один и единственный экземпляр singleton, а obTest - это просто переменная, которая ссылается на этот объект. Накладные расходы на выполнение var x = Singleton1.Instance, чтобы получить более быстрый дескриптор экземпляра в любое время, когда он вам нужен, минимален и позволяет избежать загрязнения глобального пространства имен.
Я бы не стал делать static var TheInstance = Singleton1.Instance
, так как Singleton1.Instance уже предположительно находится в статическом масштабе.
Если вам нужна хорошая реализация Singleton, вот мое:
https://stackoverflow.com/a/1010662/18255
public class SingletonBase<T> where T : class
{
static SingletonBase()
{
}
public static readonly T Instance =
typeof(T).InvokeMember(typeof(T).Name,
BindingFlags.CreateInstance |
BindingFlags.Instance |
BindingFlags.Public |
BindingFlags.NonPublic,
null, null, null) as T;
}
Объявить свой Singleton1 как это, и вы сделали:
public class Singleton1 : SingletonBase<Singleton1> {
}
Это поточно (в отличие от большинства , в том числе тот, который указан here) и лениво инстанцируется.
Большое спасибо за ответы. Это мой первый вопрос, и я получил ответы спустя менее минуты! – Fabian