Pola Objek Immutable
Rancang objek yang tidak pernah berubah setelah dibuat.
Pola Objek Immutable adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.
Merancang Objek yang Tidak Dapat Diubah
Objek yang tidak dapat diubah tidak pernah berubah setelah konstruksi. Sifat ini menghilangkan seluruh kelompok galat terkait keadaan bersama yang dapat diubah, serta membuat objek aman untuk diteruskan dan disimpan sementara.
Properti yang Hanya Dapat Dibaca
Properti tidak dapat diubah yang paling sederhana hanya dapat dibaca dan ditetapkan sekali dari konstruktor.
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,4init untuk Sintaks Penginisialisasi
Gunakan properti init jika Anda menginginkan ketidakdapatubahan sekaligus sintaks penginisialisasi objek yang praktis.
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,0required untuk Bidang Wajib
Padukan required + init agar bidang penting tidak dapat terlupakan dan tidak dapat diubah.
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 USDMengembalikan Objek Baru, Bukan Mengubah Objek Lama
Tipe yang tidak dapat diubah menyediakan operasi "perubahan" sebagai metode yang mengembalikan instans baru, sehingga objek asli tetap tidak tersentuh.
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,4Koleksi yang Tidak Dapat Diubah
Untuk bidang koleksi, simpan koleksi yang tidak dapat diubah atau hanya dapat dibaca agar isinya tidak dapat diubah melalui objek tersebut.
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 3Penyalinan Defensif
Jika Anda harus menerima koleksi yang dapat diubah, salin koleksi tersebut saat memasukkannya agar perubahan dari luar tidak dapat merambat ke dalam.
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); // 3Kesetaraan Nilai
Objek yang tidak dapat diubah sering kali memerlukan kesetaraan berdasarkan nilai: dua instans dengan data yang sama dianggap setara. Rekaman menyediakan perilaku ini secara otomatis; kelas memerlukan penggantian.
using System;
record Coord(int X, int Y);
Console.WriteLine(new Coord(1, 2) == new Coord(1, 2)); // TrueKeamanan Utas Secara Otomatis
Karena objek yang tidak dapat diubah tidak pernah berubah, objek tersebut secara inheren aman untuk digunakan bersama oleh beberapa utas tanpa kunci.
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); // prodBidang readonly dan struktur
Gunakan bidang readonly dan readonly struct untuk menerapkan ketidakdapatubahan pada tipe nilai di tingkat bidang.
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); // 5Menerapkan Semuanya
Tipe yang sepenuhnya tidak dapat diubah, menggabungkan required, init, kesetaraan nilai, dan metode pembaruan tanpa perubahan langsung.
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 -> 150Pemeriksaan Singkat
Pastikan Anda memahami prinsip pembaruan tanpa mengubah objek.
Ringkasan
Anda telah mempelajari pola untuk objek yang tidak dapat diubah.
- Gunakan properti yang hanya dapat dibaca atau properti
init, sertarequireduntuk data wajib. - Modelkan perubahan sebagai metode yang mengembalikan instans baru.
- Simpan koleksi yang tidak dapat diubah atau disalin secara defensif.
- Rekaman menyediakan kesetaraan nilai dan salinan
with; ketidakdapatubahan memberikan keamanan utas.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pola Objek Immutable” gratis?
Ya — teks lengkap “Pola Objek Immutable” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pola Objek Immutable”?
Rancang objek yang tidak pernah berubah setelah dibuat. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C# Academy?
Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Pola Objek Immutable” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?
Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Setter Khusus init
- Pengubah required
- Pola Objek Immutable
- Ekspresi with pada Record