Rumah > pembangunan bahagian belakang > C++ > Bolehkah Enum dalam C# Memegang Berbilang Nilai dengan Pemalar Dasar yang Sama, dan Apakah Implikasinya?

Bolehkah Enum dalam C# Memegang Berbilang Nilai dengan Pemalar Dasar yang Sama, dan Apakah Implikasinya?

Susan Sarandon
Lepaskan: 2025-01-03 02:12:37
asal
152 orang telah melayarinya

Can Enums in C# Hold Multiple Values with the Same Underlying Constant, and What are the Implications?

Nilai Berbilang dalam Pengisytiharan Enum: Penyelaman Lebih Dalam ke dalam CLR

Tidak seperti struct, enum dikategorikan sebagai jenis nilai ringan yang mewakili set pemalar dinamakan. Walau bagaimanapun, perkara yang dikemukakan oleh soalan ialah pemerhatian yang menarik bahawa enum nampaknya boleh membenarkan berbilang nilai untuk diberikan kepada pemalar yang sama.

Menyelidiki butiran pelaksanaan Common Language Runtime (CLR), menjadi jelas bahawa enums pada asasnya serupa dengan struct. Di sebalik tabir, enum berasal daripada kelas asas System.Enum dan pada asasnya adalah struct dengan nilai pemalar yang dipratentukan.

Pertimbangkan contoh pengisytiharan enum:

public enum Color
{
    Red = 1,
    Blue = 1,
    Green = 1
}
Salin selepas log masuk

CLR secara dalaman mentafsirkan pengisytiharan ini seperti berikut :

public struct Color : System.Enum
{
    public const int Red = 1;
    public const int Blue = 1;
    public const int Green = 1;
}
Salin selepas log masuk

Walaupun C# melarang eksplisit pengisytiharan kelas asas untuk struct, CLR tetap menjana perwakilan ini untuk enum.

Kehadiran berbilang pemalar dengan nilai yang sama dalam jenis enum tidak menimbulkan masalah. Walau bagaimanapun, penetapan nilai bukan unik ini boleh mengakibatkan tingkah laku yang tidak dijangka semasa penukaran kepada jenis enum.

Sebagai contoh:

Color color1 = (Color)1;
Color color2 = (Color)Enum.Parse(typeof(Color), "1");
Salin selepas log masuk

Kedua-dua warna1 dan warna2 akan ditetapkan kepada nilai Merah kerana penetapan nilai pertama adalah sewenang-wenangnya. Secara teknikal, warna1 mahupun warna2 tidak diberikan Merah; sebaliknya, ia memegang nilai 1. Tetapi apabila dipaparkan, Merah ialah apa yang anda akan lihat.

Selain itu, operasi perbandingan antara nilai enum bukan unik mungkin menghasilkan hasil yang mengejutkan:

// true (Red is Green??)
bool b = Color.Red == Color.Green;
Salin selepas log masuk

Persamaan ini berlaku kerana nilai berangka asas untuk Merah dan Hijau ialah 1.

Walaupun tingkah laku ini bukan sememangnya bermasalah, ia memerlukan pertimbangan apabila menggunakan enum dengan nilai bukan unik. Adalah penting untuk menentukan sama ada keunikan ini sejajar dengan tujuan dan semantik reka bentuk enum anda yang dimaksudkan.

Atas ialah kandungan terperinci Bolehkah Enum dalam C# Memegang Berbilang Nilai dengan Pemalar Dasar yang Sama, dan Apakah Implikasinya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan