Сегодня я столкнулся с проблемой, и мой друг порекомендовал мне использовать глобальный статический экземпляр или, что более элегантно, одноэлементный шаблон.Я потратил несколько часов, читая о синглетах, но кое-что еще ускользает от меня.
Справочная информация: я пытаюсь создать экземпляр API и использовать этот экземпляр во всех моих классах (в отличие от созданияновое соединение и т. д.).
Кажется, существует около 100 способов создания синглтона, но с некоторой помощью yoda я нашел несколько потоковых примеров...so, учитывая следующий код:
public sealed class Singleton
{
public static Singleton Instance { get; private set; }
private Singleton()
{
APIClass api = new APIClass(); //Can this be done?
}
static Singleton() { Instance = new Singleton(); }
}
Как / Где бы вы создали экземпляр этого нового класса и как он должен вызываться из отдельного класса?
РЕДАКТИРОВАТЬ: я понимаю, Singletonкласс можно вызывать с чем-то вроде
Singleton obj1 = Singleton.Instance();
, но смогу ли я получить доступ к методам внутри класса API (т. е. obj1.Start)?(не то, что мне нужно, просто спрашиваю)
РЕДАКТИРОВАТЬ # 2: Я мог бы быть немного преждевременным при проверке ответа, но у меня есть одна маленькая вещь, которая все еще вызывает у меня проблемы.API запускается просто отлично, к сожалению, я могу запустить два экземпляра?
Новый код
public sealed class SingletonAPI
{
public static SingletonAPI Instance { get; private set; }
private SingletonAPI() {}
static SingletonAPI() { Instance = new SingletonAPI(); }
// API method:
public void Start() { API myAPI = new API();}
}
, но если я попытаюсь сделать что-то подобное ...
SingletonAPI api = SingletonAPI.Instance;
api.Start();
SingletonAPI api2 = SingletonAPI.Instance; // This was just for testing.
api2.Start();
Я получаю сообщение о том, что не могу запустить более одного экземпляра.