0Pricing
C# Academy · Ders

Kapsülleme ve değişmez koşullar

İç durumu gizleyin, güvenli işlemler sunun ve sınıf değişmez koşullarını koruyun (ör. negatif olmayan bakiye, geçerli aralıklar).

Kapsülleme ve değişmez koşullar, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 3 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 3 dersten oluşur.

Kapsüllemeye genel bakış

Amaç: Nesnenizin durumunu koruyun.

  • Kapsülleme: fields gizleyin, güvenli APIs sunun
  • Değişmez: her zaman doğru olan bir kural
  • Yapıcılarda, ayarlayıcılarda ve yöntemlerde doğrulama yapın

Salt okunur arayüz

fields öğelerini özel tutun. Çağıranlara salt okunur bir özellik ve güvenli işlemler sunun.

using System;

// Expose read-only view; mutate via methods only
public class Counter
{
  private int _value;          // hidden state
  public int Value             // read-only to callers
  {
    get { return _value; }
    private set { _value = value; } // keep setter private
  }

  public void Increment()
  {
    Value = Value + 1;
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Counter c = new Counter();
    c.Increment();
    c.Increment();
    Console.WriteLine("Value = " + c.Value);
  }
}

Yapıcı denetimleri

Yapıcılar zorunlu durumu ayarlar. Nesneleri en baştan geçerli tutmak için geçersiz girdilere karşı denetim yapın.

using System;

// Enforce rules early (constructor guard)
public class User
{
  public string Name { get; private set; }
  public int Age { get; private set; }

  public User(string name, int age)
  {
    if (string.IsNullOrEmpty(name)) throw new ArgumentException("name");
    if (age < 0) throw new ArgumentOutOfRangeException("age");
    Name = name;
    Age = age;
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    try
    {
      User u = new User("Ada", 28);
      Console.WriteLine(u.Name + " (" + u.Age + ")");
    }
    catch (Exception ex)
    {
      Console.WriteLine("Error: " + ex.Message);
    }
  }
}

Uygulamada değişmez koşul

Bir değişmez koşul tanımlayın (ör. Bakiye ≥ 0) ve bunu ayarlayıcılarda ve yöntemlerde zorunlu kılın.

using System;

// Invariant: Balance >= 0 at all times
public class BankAccount
{
  private decimal _balance;

  public decimal Balance
  {
    get { return _balance; }
    private set
    {
      if (value < 0) throw new InvalidOperationException("Balance would be negative");
      _balance = value;
    }
  }

  public BankAccount(decimal opening)
  {
    if (opening < 0) throw new ArgumentOutOfRangeException("opening");
    _balance = opening;
  }

  public void Deposit(decimal amount)
  {
    if (amount <= 0) throw new ArgumentOutOfRangeException("amount");
    Balance = Balance + amount;
  }

  public bool TryWithdraw(decimal amount)
  {
    if (amount <= 0) return false;
    if (Balance - amount < 0) return false;
    Balance = Balance - amount;
    return true;
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    BankAccount a = new BankAccount(50m);
    a.Deposit(20m);
    bool ok = a.TryWithdraw(100m); // fails, invariant protected
    Console.WriteLine("ok=" + ok + " balance=" + a.Balance);
  }
}

Koleksiyonları koruma

İç listeleri/dizileri doğrudan sunmayın. Değişmez koşulları korumak için bir kopya (veya salt okunur bir görünüm) döndürün.

using System;
using System.Collections.Generic;

public class Tags
{
  private readonly List<string> _items = new List<string>();

  public void Add(string tag)
  {
    if (string.IsNullOrWhiteSpace(tag)) return;
    _items.Add(tag.Trim());
  }

  // Expose a copy so callers cannot mutate internal list
  public List<string> GetAllCopy()
  {
    return new List<string>(_items);
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Tags t = new Tags();
    t.Add(" apple ");
    t.Add("banana");
    List<string> view = t.GetAllCopy();
    view.Add("hacker"); // modifies the copy only
    Console.WriteLine("copy count=" + view.Count);
    Console.WriteLine("original count=" + t.GetAllCopy().Count);
  }
}

Kapsülleme ipuçları

Denetim listesi:

  • Özel fields; herkese açık properties/yöntemler.
  • Yapıcıda/ayarlayıcılarda doğrulama yapın.
  • Her çağrıdan sonra değişmez koşulların doğru kalmasını sağlayın.
  • İç koleksiyonları dışarı sızdırmayın.

Kapsülleme ilkesi

Hızlı kontrol: Kapsüllemeyi ve bir sınıf değişmez koşulunu en iyi hangi seçenek korur?

Özet

Özet: Özel fields ve doğrulanmış APIs ile kapsülleme sağlayın. Bir değişmez koşul tanımlayın ve bunu yapıcılarda, ayarlayıcılarda ve yöntemlerde zorunlu kılın. İç koleksiyonları asla dışarı sızdırmayın.

Sıkça Sorulan Sorular

“Kapsülleme ve değişmez koşullar” dersi ücretsiz mi?

Evet — “Kapsülleme ve değişmez koşullar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 3 dersten oluşur.

“Kapsülleme ve değişmez koşullar” dersinde ne öğreneceğim?

İç durumu gizleyin, güvenli işlemler sunun ve sınıf değişmez koşullarını koruyun (ör. negatif olmayan bakiye, geçerli aralıklar). C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C# Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 3 dersinin 3. dersidir.

“Kapsülleme ve değişmez koşullar” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Alanlar, otomatik özellikler ve nesne başlatıcıları
  2. Yapıcılar ve statik üyeler
  3. Kapsülleme ve değişmez koşullar
← C# Academy Sayfasına Dön