Akademi C# · Pelajaran

Struct: semantik nilai dan corak ketakbolehubahan

Fahami semantik nilai struct dalam C# 6 dan bina corak struct tidak berubah (salin apabila berubah).

Pelajaran 1 daripada 38 langkah

Struct: semantik nilai dan corak ketakbolehubahan ialah pelajaran Akademi C# percuma di CoddyKit. Ini ialah pelajaran 1 daripada 3. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Akademi C#, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Akademi C# merangkumi sejumlah 3 pelajaran.

Gambaran keseluruhan struktur

Matlamat: Gunakan struktur dengan selamat.

  • Semantik nilai (salinan semasa tugasan)
  • Corak struktur tidak boleh ubah dalam C# 6
  • Menghantar mengikut nilai berbanding mengikut ref
  • Nota tentang pembungkusan

Semantik salinan

Struktur ialah jenis nilai: tugasan menghasilkan salinan. Mengubah salinan tidak mengubah yang asal.

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
  }
}

Corak struktur tidak boleh ubah

Utamakan struktur tidak boleh ubah: fields readonly, pembina untuk keadaan yang diperlukan, dan pembantu With yang kecil untuk nilai baharu.

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);
  }
}

Mengikut nilai berbanding mengikut ref

Kaedah menerima salinan secara lalai. 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
  }
}

Asas pembungkusan

Pembungkusan menyalin struktur ke dalam rujukan objek/antara muka. Nyahbungkus menghasilkan satu lagi salinan.

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
  }
}

Petua struktur

Petua:

  • Gunakan struktur untuk objek nilai yang kecil dan tidak boleh ubah (koordinat, wang).
  • Elakkan struktur yang besar atau sangat boleh ubah.
  • Ingat salinan semasa tugasan dan apabila menghantar mengikut nilai.
  • Berhati-hati dengan pembungkusan apabila melakukan penukaran jenis kepada objek/antara muka.

Semantik nilai struktur

Semakan ringkas: Apakah yang paling tepat menerangkan semantik nilai struktur dalam C#?

Imbas kembali

Imbas kembali: Struktur ialah jenis nilai. Utamakan reka bentuk yang kecil dan tidak boleh ubah (pembina + fields readonly + With). Fahami cara penghantaran mengikut nilai berbanding ref dan pembungkusan mempengaruhi salinan.

Percuma untuk bermula

Pelajari C# dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
93
Pelajaran
346

Soalan Lazim

Adakah pelajaran “Struct: semantik nilai dan corak ketakbolehubahan” percuma?

Ya — teks penuh “Struct: semantik nilai dan corak ketakbolehubahan” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Akademi C#, tingkat taraf kepada CoddyKit PRO. Kursus Akademi C# merangkumi sejumlah 3 pelajaran.

Apakah yang akan saya pelajari dalam “Struct: semantik nilai dan corak ketakbolehubahan”?

Fahami semantik nilai struct dalam C# 6 dan bina corak struct tidak berubah (salin apabila berubah). Anda berlatih Akademi C# menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Akademi C#?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Akademi C# di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 3.

Berapa lamakah pelajaran “Struct: semantik nilai dan corak ketakbolehubahan” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Akademi C# ini?

Ya. Setiap pelajaran Akademi C# menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Struct: semantik nilai dan corak ketakbolehubahan
  2. Jenis seperti rekod dan kesamaan berasaskan nilai (corak)
  3. Enum dan [Flags]
← Kembali ke Akademi C#