Memahami Paradoks:
Dalam C#, struct (jenis nilai) boleh mewarisi daripada kelas, nampaknya bercanggah dengan tingkah laku penyalinan nilai yang wujud. Artikel ini menjelaskan cara warisan ini berfungsi tanpa menjejaskan semantik jenis nilai.
C# membenarkan struct untuk mewarisi daripada kelas, mewajibkan bahawa semua struct akhirnya terbit daripada System.ValueType
, yang dengan sendirinya mewarisi daripada System.Object
. Warisan ini memberikan akses kepada ahli kelas asas.
Common Language Runtime (CLR) membezakan antara jenis nilai dan jenis rujukan berdasarkan pengurusan ingatannya. Jenis nilai disalin mengikut nilai, manakala jenis rujukan disalin melalui rujukan. Perbezaan asas ini kekal tanpa mengira pewarisan.
Warisan daripada jenis rujukan tidak menjejaskan ciri teras jenis nilai: penyalinan nilai. Contoh jenis nilai sentiasa disalin mengikut nilai, tanpa mengira hierarki warisannya.
Bayangkan kotak merah (jenis nilai) dan kotak biru (jenis rujukan). Tiga kotak biru khas wujud: Object
, ValueType
dan Enum
. Semua kotak merah berada di dalam sama ada ValueType
atau Enum
. Penahanan dalam kotak biru tidak mengubah warna kotak merah; begitu juga, warisan tidak mengubah gelagat penyalinan jenis nilai.
Atas ialah kandungan terperinci Bagaimanakah Jenis Nilai dalam C# Boleh Mewarisi daripada Objek (Jenis Rujukan) Semasa Mengekalkan Gelagat Penyalinan Nilai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!