Struct: semantik nilai dan corak ketakbolehubahan
Fahami semantik nilai struct dalam C# 6 dan bina corak struct tidak berubah (salin apabila berubah).
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
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.
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
- Struct: semantik nilai dan corak ketakbolehubahan
- Jenis seperti rekod dan kesamaan berasaskan nilai (corak)
- Enum dan [Flags]