CodeBlanks Logo Icon CodeBlanks

Singleton

C# kursu · İleri seviye · Ders 61/83

Singleton deseniyle tek örnek sınıf yazmayı öğrenirsin.

Singleton deseni

Singleton, bir sınıftan yalnızca tek örnek (instance) oluşturulmasını garanti eden desendir. Bunu üç parça sağlar: dışarıdan new ile örneklemeyi engelleyen özel kurucu (private Config()), tek örneği tutan statik alan (private static readonly Config _instance) ve bu örneği dışarıya açan statik özellik (public static Config Instance).

Sınıf sealed işaretlenirse alt sınıfların ikinci bir örnek yaratması önlenir. Statik alanlar C#'ta ilk erişimde tembel (lazy) başlatılır; bu yüzden basit Singleton için ek kilit gerekmez.

sealed ve tembel başlatma

sealed anahtar kelimesi sınıfı mühürler; alt sınıflar yeni örnek yaratamaz. Böylece Singleton'un tek örnek garantisi türetme yoluyla delinemez. C#'ta statik alanlar ilk erişildiği anda oluşturulur; bu tembel başlatma (lazy initialization) davranışıdır.

İfade gövdeli özellikle tek örneği döndürmek kısa ve nettir: public static Config Instance => _instance;. Burada => ok operatörü, özelliğin değerini hesaplayan tek satırlık ifadedir.

Uygulama Singleton Config sınıfını tanımla

sealed class Config tanımla. Özel kurucu (private Config()), static readonly _instance alanı, public static Config Instance özelliği ve string Greet() metodu ekle. Main'de Config.Instance.Greet() sonucunu yazdır.

Örnek çözümü göster
sealed class Config tanımla; private static readonly Config _instance = new Config(); public static Config Instance => _instance; private Config() { } public string Greet() => "Merhaba"; yaz. Main'de Console.WriteLine(Config.Instance.Greet());
Örnek çözüm:
using System;

sealed class Config
{
    private static readonly Config _instance = new Config();
    public static Config Instance => _instance;
    private Config() { }
    public string Greet() => "Merhaba";
}

class Program
{
    static void Main()
    {
        Console.WriteLine(Config.Instance.Greet());
    }
}

Kendini test et

  1. Singleton deseninin temel amacı nedir?

    • Tek örnek sağlamak ve genel erişim vermek
    • Çok sayıda örnek oluşturmak
    • Kalıtımı zorunlu kılmak
    • Statik metodları gizlemek
    Cevabı göster

    Tek örnek sağlamak ve genel erişim vermek — Doğru. Singleton tek örnek garanti eder ve statik özellikle erişim verir.

  2. İfade gövdeli özelliği tamamla

    public static Config Instance ____ _instance;
    Cevabı göster
    public static Config Instance => _instance;
  3. Singleton'da özel kurucu neden kullanılır?

    • Sınıfı statik yapmak için
    • Daha hızlı çalışmasını sağlamak için
    • Dışarıdan new ile yeni örnek oluşturulmasını engellemek için
    • Mirastan kazanılan metotları gizlemek için
    Cevabı göster

    Dışarıdan new ile yeni örnek oluşturulmasını engellemek için — Doğru. Özel kurucu dışarıdan new ile yeni örnek oluşturulmasını engeller.

İleri seviye bölümündeki tüm dersler