0Pricing
C# Academy · Pelajaran

Struct: semantik nilai dan pola ketidakberubahan

Pahami semantik nilai struct di C# 6 dan bangun pola struct yang tidak berubah (salin saat perubahan).

Struct: semantik nilai dan pola ketidakberubahan adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 3. 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 3 pelajaran total.

Ikhtisar struktur

Tujuan: Menggunakan struktur dengan aman.

  • Semantik nilai (disalin saat penugasan)
  • pattern struktur tidak dapat diubah dalam C# 6
  • Meneruskan berdasarkan nilai dibandingkan dengan berdasarkan ref
  • Catatan tentang pembungkusan

Semantik penyalinan

Struktur adalah tipe nilai: penugasan membuat salinan. Mengubah salinan tidak mengubah aslinya.

using System;

// Simple struct with public fields for demo (okay for small POD data)
public struct Point
{
  public int X;
  public int Y;
}

public class Program
{
  public static void Main(string[] args)
  {
    Point a = new Point();
    a.X = 1; a.Y = 2;

    Point b = a;     // copy the value
    b.X = 9;         // change the copy

    Console.WriteLine("a=(" + a.X + "," + a.Y + ")");
    Console.WriteLine("b=(" + b.X + "," + b.Y + ")"); // different from a
  }
}

pattern struktur tidak dapat diubah

Utamakan struktur tidak dapat diubah: bidang readonly, konstruktor untuk keadaan yang diperlukan, dan fungsi pembantu kecil With untuk nilai baru.

using System;

// Immutable struct pattern (C# 6): readonly fields + constructor + With method
public struct Money
{
  private readonly decimal _amount;
  private readonly string _currency;

  public decimal Amount { get { return _amount; } }
  public string Currency { get { return _currency; } }

  public Money(decimal amount, string currency)
  {
    _amount = amount;
    _currency = currency ?? "USD";
  }

  // Copy-on-change: returns a new value with updated amount
  public Money WithAmount(decimal amount)
  {
    return new Money(amount, _currency);
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Money m1 = new Money(10m, "USD");
    Money m2 = m1.WithAmount(15m); // new value

    Console.WriteLine("m1: " + m1.Amount + " " + m1.Currency);
    Console.WriteLine("m2: " + m2.Amount + " " + m2.Currency);
  }
}

Berdasarkan nilai dibandingkan dengan berdasarkan ref

Metode menerima salinan secara bawaan. Gunakan ref untuk mengubah struktur milik pemanggil.

using System;

public struct Counter
{
  public int Value;
}

public class Program
{
  static void IncrementByValue(Counter c)
  {
    c.Value = c.Value + 1; // changes only the local copy
  }

  static void IncrementByRef(ref Counter c)
  {
    c.Value = c.Value + 1; // changes the caller's variable
  }

  public static void Main(string[] args)
  {
    Counter a = new Counter();
    IncrementByValue(a);
    Console.WriteLine("After by-value: " + a.Value); // 0

    IncrementByRef(ref a);
    Console.WriteLine("After by-ref: " + a.Value);   // 1
  }
}

Dasar-dasar pembungkusan

Pembungkusan menyalin struktur ke dalam reference objek/antarmuka. Pembukaan bungkus membuat salinan lain.

using System;

public interface IShow { string Show(); }

public struct Temperature : IShow
{
  public int C;
  public string Show() { return C + "C"; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Temperature t = new Temperature();
    t.C = 25;

    object boxed = t;              // boxing: copy into object
    Temperature copy = (Temperature)boxed; // unbox (another copy)
    copy.C = 30;

    Console.WriteLine("t = " + t.C);     // 25
    Console.WriteLine("copy = " + copy.C); // 30
  }
}

Kiat struktur

Kiat:

  • Gunakan struktur untuk objek nilai yang kecil dan tidak dapat diubah (koordinat, uang).
  • Hindari struktur yang besar atau sangat mudah diubah.
  • Ingat bahwa salinan dibuat saat penugasan dan saat meneruskan berdasarkan nilai.
  • Perhatikan pembungkusan saat melakukan konversi ke objek/antarmuka.

Semantik nilai struktur

Pemeriksaan singkat: Apa yang paling tepat menggambarkan semantik nilai struktur dalam C#?

Ringkasan

Ringkasan: Struktur adalah tipe nilai. Utamakan rancangan kecil yang tidak dapat diubah (konstruktor + bidang readonly + With). Pahami bagaimana penerusan berdasarkan nilai dibandingkan dengan ref dan pembungkusan memengaruhi salinan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Struct: semantik nilai dan pola ketidakberubahan” gratis?

Ya — teks lengkap “Struct: semantik nilai dan pola ketidakberubahan” 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 3 pelajaran total.

Apa yang akan aku pelajari di “Struct: semantik nilai dan pola ketidakberubahan”?

Pahami semantik nilai struct di C# 6 dan bangun pola struct yang tidak berubah (salin saat perubahan). 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 1 dari 3.

Berapa lama pelajaran “Struct: semantik nilai dan pola ketidakberubahan” 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. Struct: semantik nilai dan pola ketidakberubahan
  2. Tipe mirip record dan kesetaraan berbasis nilai (pola)
  3. Enum dan [Flags]
← Kembali ke C# Academy