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,4Baş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,0Zorunlu 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 USDDeğ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,4Değ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 3Savunmacı 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); // 3Değ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)); // TrueHazı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); // prodreadonly 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); // 5Bir 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 -> 150Hı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 verequiredkullanı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
withkopyaları 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
- Yalnızca init ile Ayarlanabilen Setter'lar
- required Değiştiricisi
- Değişmez Nesne Kalıpları
- Record'larda with İfadeleri