Ekspresi with pada Record
Buat salinan objek immutable yang telah dimodifikasi.
Ekspresi with pada Record adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.
Ekspresi with
Ekspresi with membuat salinan rekaman dengan beberapa properti yang diubah, sementara rekaman asli tetap tidak tersentuh. Inilah cara idiomatis untuk "memperbarui" rekaman yang tidak dapat diubah.
using System;
record Point(int X, int Y);
var a = new Point(1, 2);
var b = a with { Y = 9 };
Console.WriteLine(a + " | " + b); // Point { X = 1, Y = 2 } | Point { X = 1, Y = 9 }Perubahan Nondestruktif
Rekaman asli tidak pernah diubah. with melakukan penyalinan dangkal dan menerapkan perubahan yang tercantum hanya pada salinan.
using System;
record User(string Name, int Age);
var original = new User("Ada", 30);
var older = original with { Age = 31 };
Console.WriteLine(original.Age + " " + older.Age); // 30 31Mengubah Beberapa Properti
Masukkan beberapa penetapan di dalam kurung kurawal untuk mengubah lebih dari satu properti sekaligus.
using System;
record Config(string Env, int Retries, bool Verbose);
var baseCfg = new Config("dev", 3, false);
var prod = baseCfg with { Env = "prod", Verbose = true };
Console.WriteLine(prod.Env + " " + prod.Retries + " " + prod.Verbose); // prod 3 TrueMenyalin Properti yang Tidak Berubah
Properti yang tidak Anda sebutkan disalin apa adanya dari record sumber.
using System;
record Product(string Name, decimal Price, int Stock);
var p = new Product("Book", 12m, 5);
var discounted = p with { Price = 10m };
Console.WriteLine(discounted.Name + " " + discounted.Stock); // Book 5with dan Kesetaraan Nilai
Karena record menggunakan kesetaraan nilai, salinan yang tidak mengubah apa pun sama dengan aslinya.
using System;
record Coord(int X, int Y);
var a = new Coord(1, 2);
var b = a with { };
Console.WriteLine(a == b); // True (value equal)
Console.WriteLine(ReferenceEquals(a, b)); // False (different objects)Semantik Salinan Dangkal
with menyalin referensi, bukan keseluruhan grafik objek secara mendalam. Objek bertingkat yang dapat diubah digunakan bersama oleh objek asli dan salinannya.
using System;
using System.Collections.Generic;
record Cart(List<string> Items);
var a = new Cart(new List<string> { "x" });
var b = a with { };
b.Items.Add("y"); // shared list!
Console.WriteLine(a.Items.Count); // 2with pada struct record
Struct record juga mendukung with, sehingga menghasilkan salinan termodifikasi dari tipe nilai.
using System;
record struct Size(int W, int H);
var s = new Size(4, 4);
var wide = s with { W = 8 };
Console.WriteLine(wide.W + "x" + wide.H); // 8x4Merangkai Ekspresi with
Anda dapat merangkai ekspresi with untuk menerapkan serangkaian perubahan, yang masing-masing menghasilkan record baru.
using System;
record Point(int X, int Y, int Z);
var p = new Point(0, 0, 0)
with { X = 1 }
with { Y = 2 }
with { Z = 3 };
Console.WriteLine(p); // Point { X = 1, Y = 2, Z = 3 }Pembaruan Tanpa Kelas Pembuat
with menghilangkan kebutuhan akan kelas pembuat: cukup salin dan ubah bidang yang Anda inginkan.
using System;
record Email(string To, string Subject, string Body);
var draft = new Email("a@b.com", "Hi", "");
var ready = draft with { Body = "Welcome!" };
Console.WriteLine(ready.Body); // Welcome!Logika Salinan Kustom
Record menghasilkan konstruktor salinan yang dilindungi dan digunakan oleh with. Anda dapat mendeklarasikan konstruktor sendiri untuk menyesuaikan cara salinan dibuat.
using System;
record Audited(string Name) {
public int Version { get; init; } = 1;
protected Audited(Audited other) {
Name = other.Name;
Version = other.Version + 1; // bump on every copy
}
}
var a = new Audited("x");
var b = a with { };
Console.WriteLine(a.Version + " " + b.Version); // 1 2Menyatukan Semuanya
Memodelkan transisi status dengan with menjaga riwayat yang mudah diaudit dan tidak dapat diubah.
using System;
record Order(string Id, string Status);
var created = new Order("O1", "Created");
var paid = created with { Status = "Paid" };
var shipped = paid with { Status = "Shipped" };
Console.WriteLine(created.Status + " -> " + paid.Status + " -> " + shipped.Status);Pemeriksaan Singkat
Uji pemahaman Anda tentang ekspresi with.
Rangkuman
Anda telah mempelajari ekspresi with pada record.
a with { Prop = value }menyalin dan mengubah properti yang dipilih.- Objek asli tidak pernah diubah; operasi ini tidak merusak data asli.
- Salinan bersifat dangkal, sehingga objek bertingkat yang dapat diubah digunakan bersama.
- Fitur ini berfungsi pada record dan struct record serta dapat dirangkai.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Ekspresi with pada Record” gratis?
Ya — teks lengkap “Ekspresi with pada Record” 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 “Ekspresi with pada Record”?
Buat salinan objek immutable yang telah dimodifikasi. 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 4 dari 4.
Berapa lama pelajaran “Ekspresi with pada Record” 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