Saya mengajukan pertanyaan ini meskipun telah membaca yang serupa tetapi tidak persis apa yang saya inginkan di konvensi penamaan C # untuk enum dan properti yang cocok
Saya menemukan bahwa saya memiliki kecenderungan untuk menyebut enum dalam bentuk jamak dan kemudian 'menggunakannya' sebagai singular, contoh:
public enum EntityTypes {
Type1, Type2
}
public class SomeClass {
/*
some codes
*/
public EntityTypes EntityType {get; set;}
}
Tentu saja itu berhasil dan ini adalah gaya saya, tetapi adakah yang bisa menemukan masalah potensial dengan konvensi semacam itu? Saya memiliki nama "jelek" dengan kata "Status":
public enum OrderStatuses {
Pending, Fulfilled, Error, Blah, Blah
}
public class SomeClass {
/*
some codes
*/
public OrderStatuses OrderStatus {get; set;}
}
Info Tambahan: Mungkin pertanyaan saya tidak cukup jelas. Saya sering harus berpikir keras ketika menyebutkan variabel dari tipe enum yang saya tentukan. Saya tahu praktik terbaik, tetapi itu tidak membantu untuk memudahkan pekerjaan saya memberi nama variabel-variabel itu.
Saya tidak mungkin mengekspos semua properti enum saya (katakan "Status") sebagai "MyStatus".
Pertanyaan saya: Adakah yang bisa menemukan masalah potensial dengan konvensi saya yang dijelaskan di atas? Ini BUKAN tentang praktik terbaik.
Ulangi pertanyaan:
Nah, saya kira saya harus mengajukan pertanyaan seperti ini: Dapatkah seseorang keluar cara generik yang baik untuk penamaan tipe enum sehingga ketika digunakan, penamaan enum 'instance' akan sangat mudah?
Jawaban:
Microsoft merekomendasikan untuk menggunakan singular untuk
Enum
s kecualiEnum
mewakili bidang bit (gunakanFlagsAttribute
juga). Lihat Konvensi Penamaan Jenis Pencacahan (bagian dari Pedoman Penamaan Microsoft ).Untuk menanggapi klarifikasi Anda, saya melihat tidak ada yang salah dengan salah satu dari berikut ini:
atau
sumber
OrderStatus == OrderStatus.Pending
diakui sebagai variabel untuk kiri dan kemudian enumerasi di sebelah kananSaya mulai memberi nama enum dalam bentuk jamak tetapi sejak itu berubah menjadi tunggal. Sepertinya lebih masuk akal dalam konteks di mana mereka digunakan.
Dibandingkan dengan:
Saya menemukan bentuk tunggal terdengar lebih alami dalam konteks. Kami sepakat bahwa ketika mendeklarasikan enum, yang terjadi di satu tempat, kami berpikir "ini adalah kelompok barang apa pun", tetapi ketika menggunakannya, mungkin di banyak tempat, bahwa kami berpikir "ini adalah apa pun" .
sumber
0
untuk nilai yang tidak diketahui, dengan cara itu variabel yang tidak diinisialisasi adalah secara defaultUnknown
.[Flags]
atribut pada contoh Anda? Tidak masuk akal jika sesuatu memiliki status "Tidak Lengkap" dan "Siap". Jika sudahenum [Flags]Steps { First, Second, Third }
, akankah Anda benar-benar memberi nama variabel AndacompletedStep
?Situasi tidak pernah benar-benar berlaku untuk jamak.
Suatu
enum
menunjukkan atribut dari sesuatu atau yang lain. Saya akan memberi contoh:Anda dapat memiliki satu jenis, tetapi coba pikirkan dalam beberapa, bukan jamak:
Humour.Irony | Humour.Sarcasm
Daripada
Humours { Irony, Sarcasm }
Anda memiliki selera humor, Anda tidak memiliki selera humor.
sumber
Humours
berisi contohHumours.Irony | Huomours.Sarcasm
??Secara umum, rekomendasi praktik terbaik adalah tunggal, kecuali untuk enum yang memiliki atribut [Bendera] yang melekat padanya, (dan yang karenanya dapat berisi bidang bit), yang harus jamak.
Setelah membaca pertanyaan Anda yang diedit, saya merasa Anda mungkin berpikir nama properti atau nama variabel harus berbeda dari nama tipe enum ... Tidak. Berikut ini baik-baik saja ...
sumber
public Color Color { get {...} set {...} }
Ini adalah salah satu dari sedikit tempat yang saya tidak setuju dengan konvensi yang cukup untuk menentangnya. TBH, SAYA BENCI bahwa definisi enum dan turunannya dapat memiliki nama yang sama. Saya mem-postfix semua Enum saya dengan "Enum" secara khusus karena itu memperjelas konteksnya dalam penggunaan apa pun. IMO itu membuat kodenya jauh lebih mudah dibaca.
Tidak ada yang akan pernah bingung apa enum dan apa contohnya.
sumber
Enum
? Ini bukan seolah-olah penulis mengusulkan postfixing semua vars dengan tipenya. Penulis juga memiliki kasus yang jauh lebih kuat mengingat bahwa alasan diberikan, sedangkan M $ memberikan nol pembenaran.Jika Anda mencoba untuk menulis secara langsung, kode yang dilarang seperti ini:
Pilihan Anda adalah:
Abaikan rekomendasi MS dan gunakan awalan atau akhiran pada nama enum:
Pindahkan definisi enum di luar kelas, lebih disukai ke kelas lain. Berikut ini adalah solusi mudah untuk hal di atas:
sumber
enum
sarang di tempat pertama dan kemudian bersarang di kelas lain jika ini menyebabkan masalah?Gender
dan nama enum sebagaiSex
. Jadiisac.Gender = Sex.Male
..Praktik Terbaik - gunakan tunggal. Anda memiliki daftar item yang membentuk Enum. Menggunakan item dalam daftar terdengar aneh ketika Anda mengatakannya
Versions.1_0
. Lebih masuk akal untuk mengatakanVersion.1_0
karena hanya ada satu Versi 1_0.sumber
Datang agak terlambat ...
Ada perbedaan penting antara pertanyaan Anda dan yang Anda sebutkan (yang saya tanyakan ;-):
Anda menempatkan definisi enum dari kelas, yang memungkinkan Anda untuk memiliki nama yang sama untuk enum dan properti:
Dalam hal ini, saya akan mengikuti pedoman MS dan menggunakan nama tunggal untuk enum (jamak untuk bendera). Ini mungkin solusi termudah.
Masalah saya (dalam pertanyaan lain ) adalah ketika enum didefinisikan dalam ruang lingkup kelas, mencegah penggunaan properti yang dinamai persis setelah enum.
sumber
Di thread lain konvensi penamaan C # untuk enum dan properti yang cocok seseorang menunjukkan apa yang saya pikir adalah ide yang sangat bagus:
"Saya tahu saran saya bertentangan dengan konvensi Penamaan .NET, tetapi saya secara pribadi awalan enum dengan 'E' dan enum flag dengan 'F' (mirip dengan bagaimana kita awali Antarmuka dengan 'I')."
sumber