C Union dalam C#: Panduan Menterjemah Secara Berkesan
Dalam proses menukar kod C kepada C#, seseorang mungkin menemui kata kunci " kesatuan" dalam pengisytiharan struct. Konsep ini, tiada dalam C#, memerlukan pendekatan alternatif untuk memudahkan fungsinya.
Memahami Semantik Kesatuan
Kesatuan dalam C mewakili struktur data yang membenarkan berbilang medan untuk berkongsi ruang ingatan yang sama. Sebagai contoh, struktur C berikut:
struct Foo { float bar; union { int killroy; float fubar; } as; }
Mengandungi bar pembolehubah terapung dan ahli kesatuan sebagai. Dalam sebagai, dua medan, killroy dan fubar, boleh menduduki lokasi memori yang sama, bermakna mengubah suai satu dengan berkesan mengubah nilai yang lain.
Menterjemah Union kepada C#
Persamaan yang paling hampir dalam C# kepada kesatuan dicapai melalui reka letak medan eksplisit. Teknik ini melibatkan penggunaan kelas StructLayoutAttribute untuk menentukan susun atur memori struct. Kod berikut menunjukkan cara menterjemah kesatuan C kepada C#:
[StructLayout(LayoutKind.Explicit)] public struct SampleUnion { [FieldOffset(0)] public float bar; [FieldOffset(4)] public int killroy; [FieldOffset(4)] public float fubar; }
LayoutKind.Explicit menandakan bahawa medan akan mempunyai offset eksplisit dalam struct. FieldOffsetAttribute digunakan untuk menetapkan offset kepada setiap medan. Dalam kes ini, bar terletak pada offset 0, manakala killroy dan fubar share offset 4.
Pertimbangan Penggunaan
Apabila menggunakan kesatuan dalam struct, adalah penting untuk diingat bahawa hanya satu daripada medan kongsi boleh aktif pada bila-bila masa. Mengubah suai satu medan secara automatik akan menimpa nilai yang lain dalam lokasi memori yang sama.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menterjemah Kesatuan C dengan Berkesan kepada C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!