0Pricing
C# Academy · Pelajaran

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 31

Mengubah 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 True

Menyalin 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 5

with 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); // 2

with 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); // 8x4

Merangkai 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 2

Menyatukan 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

  1. Setter Khusus init
  2. Pengubah required
  3. Pola Objek Immutable
  4. Ekspresi with pada Record
← Kembali ke C# Academy