Bugün bir sorunla karşılaştım ve bir arkadaşım global statik bir örnek veya daha zarif bir tekil kalıp kullanmama önerdi. Bir kaç saat bekarlarım hakkında okumuştum ama birkaç şey hala beni kaçar.Genel statik örnek yerine singleton kullanma
Arka plan: Neyi başarmaya çalışıyorum bir API örneğini oluşturmak ve tüm sınıflarımda bu yeni örneği kullanmak (yeni bir bağlantı yapmak yerine, vs.).
Tek bir satır oluşturmanın yaklaşık 100 yolu var gibi görünüyor, ancak yoda'dan bazı yardımlarla bazı iş parçacığı örnekleri buldum.
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(); }
}
/nasıl bu yeni sınıf örneğini olur ve nasıl ayrı sınıftan çağrılmalıdır: ..Bu yüzden aşağıdaki kodu verilen?
DÜZENLEME: Ben Singleton sınıf
Singleton obj1 = Singleton.Instance();
gibi bir şeyle çağrılabilir fark ama API'ler Sınıf içinde yöntemlerine erişmek mümkün olacaktır (yani obj1.Start.)? (gerek yok, sadece soruyorum)
EDIT # 2: Cevabı kontrol etmek için biraz erken olmuş olabilirim ama hala bana sorun çıkaran küçük bir şeyim var. API gayet iyi çalışıyor, ne yazık ki iki örneği başlatamıyorum?
Yeni Kod
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();}
}
ama
SingletonAPI api = SingletonAPI.Instance;
api.Start();
SingletonAPI api2 = SingletonAPI.Instance; // This was just for testing.
api2.Start();
ben birden fazla örneği başlayamaz belirten bir hata olsun ... Böyle bir şey yapmak çalışırsanız.
Gitmelisiniz Ayrıca, bir başka sınıfın Singleton'unuzun bir kopyasını almasını engellemek için özel bir kurucu ekleyin. –
Teşekkür ederim, bunu özledim. – Ryan
Api sınıfında, açıkta kalmadığından yöntemleri arayamayacaksınız. –