0Pricing
C# Academy · Ders

Değişmez Nesne Kalıpları

Oluşturulduktan sonra hiç değişmeyen nesneler tasarlayın.

Değişmez Nesne Kalıpları, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 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 4 dersten oluşur.

Değişmez Nesneler Tasarlama

Değişmez bir nesne, oluşturulduktan sonra hiçbir zaman değişmez. Değişmezlik, paylaşılan değiştirilebilir durum çevresindeki bütün hata sınıflarını ortadan kaldırır; ayrıca nesnelerin güvenle aktarılmasını ve önbelleğe alınmasını sağlar.

Yalnızca Get Erişimli Özellikler

En basit değişmez özellik, bir oluşturucudan bir kez atanan yalnızca get erişimli özelliktir.

using System;

class Point {
    public int X { get; }
    public int Y { get; }
    public Point(int x, int y) { X = x; Y = y; }
}

var p = new Point(3, 4);
Console.WriteLine(p.X + "," + p.Y); // 3,4

Başlatıcı Söz Dizimi için init

Değişmezliğin yanı sıra kullanışlı nesne başlatıcı söz dizimini istediğinizde init özelliklerini kullanın.

using System;

class Color {
    public int R { get; init; }
    public int G { get; init; }
    public int B { get; init; }
}

var c = new Color { R = 255, G = 128, B = 0 };
Console.WriteLine(c.R + "," + c.G + "," + c.B); // 255,128,0

Zorunlu Alanlar için required

Gerekli alanların unutulamaması ve değiştirilememesi için required + init kullanın.

using System;

class Money {
    public required decimal Amount { get; init; }
    public required string Currency { get; init; }
}

var m = new Money { Amount = 9.99m, Currency = "USD" };
Console.WriteLine(m.Amount + " " + m.Currency); // 9.99 USD

Değiştirmek Yerine Yeni Nesneler Döndürme

Değişmez türler, "değiştirme" işlemlerini özgün örneği değiştirmeden yeni bir örnek döndüren yöntemler olarak sunar.

using System;

class Point {
    public int X { get; init; }
    public int Y { get; init; }
    public Point Move(int dx, int dy) => new Point { X = X + dx, Y = Y + dy };
}

var a = new Point { X = 1, Y = 1 };
var b = a.Move(2, 3);
Console.WriteLine(a.X + "," + a.Y + " -> " + b.X + "," + b.Y); // 1,1 -> 3,4

Değişmez Koleksiyonlar

Koleksiyon alanları için, içeriklerin nesne üzerinden değiştirilememesi amacıyla değişmez veya salt okunur bir koleksiyon saklayın.

using System;
using System.Collections.Immutable;

class Team {
    public ImmutableList<string> Members { get; init; } = ImmutableList<string>.Empty;
}

var t = new Team { Members = ["Ada", "Lin"] };
var t2 = new Team { Members = t.Members.Add("Sam") };
Console.WriteLine(t.Members.Count + " " + t2.Members.Count); // 2 3

Savunmacı Kopyalama

Değiştirilebilir bir koleksiyon kabul etmeniz gerekiyorsa, dışarıdaki değişikliklerin içeri sızmasını önlemek için koleksiyonu alırken kopyalayın.

using System;
using System.Collections.Generic;
using System.Linq;

class Snapshot {
    private readonly int[] data;
    public Snapshot(IEnumerable<int> source) => data = source.ToArray();
    public IReadOnlyList<int> Data => data;
}

var list = new List<int> { 1, 2, 3 };
var snap = new Snapshot(list);
list.Add(4); // does not affect snap
Console.WriteLine(snap.Data.Count); // 3

Değer Eşitliği

Değişmez nesneler genellikle değere dayalı eşitlik ister: aynı verilere sahip iki örnek eşit kabul edilir. Kayıtlar bunu hazır olarak sağlar; sınıfların ise geçersiz kılmalar yapması gerekir.

using System;

record Coord(int X, int Y);

Console.WriteLine(new Coord(1, 2) == new Coord(1, 2)); // True

Hazır Gelen İş Parçacığı Güvenliği

Değişmez nesneler hiçbir zaman değişmediği için kilit kullanmadan paylaşılmaları doğaları gereği iş parçacığı açısından güvenlidir.

using System;

class ReadonlyConfig {
    public required string Env { get; init; }
}

var cfg = new ReadonlyConfig { Env = "prod" };
// safe to read from many threads without synchronization
Console.WriteLine(cfg.Env); // prod

readonly Alanlar ve Yapılar

Değer türleri için alan düzeyinde değişmezliği zorunlu kılmak üzere readonly alanları ve readonly struct kullanın.

using System;

readonly struct Vector {
    public readonly double X, Y;
    public Vector(double x, double y) { X = x; Y = y; }
    public double Length => Math.Sqrt(X * X + Y * Y);
}

Console.WriteLine(new Vector(3, 4).Length); // 5

Bir Araya Getirme

required, init, değer eşitliği ve değişiklik yapmadan güncelleme yöntemi kullanan tamamen değişmez bir tür.

using System;

record Account(string Id, decimal Balance) {
    public Account Deposit(decimal amount) => this with { Balance = Balance + amount };
}

var a = new Account("A1", 100m);
var b = a.Deposit(50m);
Console.WriteLine(a.Balance + " -> " + b.Balance); // 100 -> 150

Hızlı Kontrol

Değişmez güncelleme ilkesini doğrulayın.

Özet

Değişmez nesneler için kullanılan kalıpları öğrendiniz.

  • Zorunlu veriler için yalnızca get erişimli veya init özelliklerini ve required kullanın.
  • Değişiklikleri yeni örnekler döndüren yöntemler olarak modelleyin.
  • Değişmez veya savunmacı biçimde kopyalanmış koleksiyonlar saklayın.
  • Kayıtlar değer eşitliği ve with kopyaları sağlar; değişmezlik ise iş parçacığı güvenliği sunar.

Sıkça Sorulan Sorular

“Değişmez Nesne Kalıpları” dersi ücretsiz mi?

Evet — “Değişmez Nesne Kalıpları” 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 4 dersten oluşur.

“Değişmez Nesne Kalıpları” dersinde ne öğreneceğim?

Oluşturulduktan sonra hiç değişmeyen nesneler tasarlayın. 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, 4 dersinin 3. dersidir.

“Değişmez Nesne Kalıpları” 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. Yalnızca init ile Ayarlanabilen Setter'lar
  2. required Değiştiricisi
  3. Değişmez Nesne Kalıpları
  4. Record'larda with İfadeleri
← C# Academy Sayfasına Dön