Saya memiliki kelas yang menggunakan enumerasi, enum saat ini dalam file sendiri yang tampaknya boros.
Apa pendapat umum tentang enum yang ditempatkan di dalam namespace dari file yang mereka konsumsi? Atau haruskah enum benar-benar hidup dalam file cs sendiri?
Edit
Saya harus menyebutkan bahwa sementara kelas yang bersangkutan menggunakan enumerasi ini, demikian juga penelepon eksternal. Dengan kata lain, kelas lain dapat mengatur enumerasi ini. Jadi mereka tidak digunakan secara internal ke kelas, kalau tidak pertanyaan ini akan menjadi tidak punya otak.
c#
coding-style
enums
Finglas
sumber
sumber
Jawaban:
Saya tidak akan mengatakan "boros" (berapa biaya file tambahan?), Tetapi sering tidak nyaman. Biasanya ada satu kelas yang paling dekat dengan enum, dan saya menempatkan mereka di file yang sama.
sumber
Ini benar-benar hanya masalah preferensi.
Saya lebih suka meletakkan setiap enumerasi dalam file sendiri (juga untuk setiap antarmuka, kelas, dan struct, tidak peduli seberapa kecil). Itu membuat mereka lebih mudah ditemukan ketika saya datang dari solusi lain atau sebaliknya belum memiliki referensi ke jenis yang dimaksud.
Menempatkan satu jenis di setiap file juga memudahkan mengidentifikasi perubahan dalam sistem kontrol sumber tanpa perbedaan.
sumber
Ini sepenuhnya masalah gaya. Apa yang saya cenderung lakukan adalah memiliki file yang disebut
Enums.cs
dalam solusi di mana deklarasi enum dikumpulkan.Tetapi mereka biasanya ditemukan melalui F12kunci.
sumber
enum
bukannya itu berada dalam file yang berisi kelas yang terkait tetapi tidak harus satu-satunya kelas yang menggunakannya...enums have a relation to classes mostly.
. Di sinilah Anda kehilangan saya. Tolong beri contoh bagaimana Anda akan menangani enum yang memiliki hubungan dengan beberapa kelas?AnchorStyle
enum di seluruh perpustakaan UI, saya biasanya juga memiliki sub namespace UI dan folder yang sesuai. Saya kemudian akan meletakkannya diAnchorStyle.cs
file di folder UI di mana saya dapat dengan mudah menemukannya, bukan di file "Enums.cs".Pertanyaan yang ingin Anda tanyakan kepada diri Anda adalah: apakah ada sesuatu tentang tipe enumerasi dalam C # yang menunjukkan saya harus memperlakukannya secara berbeda dari semua jenis lain yang saya buat?
Jika enumerasi bersifat publik, itu harus diperlakukan seperti jenis publik lainnya. Jika bersifat pribadi, nyatakan sebagai anggota kelas yang bersarang menggunakannya. Tidak ada alasan kuat untuk menempatkan dua tipe publik dalam file yang sama hanya karena satu adalah enumerasi. Fakta bahwa itu adalah tipe publik adalah yang terpenting; rasa jenis tidak.
sumber
Keuntungan lain dari menempatkan setiap jenis (kelas, struct, enum) dalam file sendiri adalah kontrol sumber. Anda dapat dengan mudah mendapatkan seluruh riwayat jenis.
sumber
Saya menempatkan sebagian besar di dalam namespace dan di luar kelas sehingga mudah diakses kelas lain di namespace seperti di bawah ini.
sumber
Secara umum saya lebih suka enums saya berada dalam file yang sama dengan Kelas yang kemungkinan besar akan menjadi atribut. Jika misalnya saya memiliki kelas
Task
maka enumTaskStatus
akan berada di file yang sama.Namun, jika saya memiliki enum yang lebih umum, maka saya menyimpannya secara kontekstual di berbagai file.
sumber
Itu tergantung pada akses apa yang dibutuhkan.
Jika enum hanya digunakan oleh satu kelas, tidak apa-apa untuk mendeklarasikannya di dalam kelas itu karena Anda tidak perlu menggunakannya di tempat lain.
Untuk enum yang digunakan oleh beberapa kelas atau dalam API publik, maka saya akan selalu menyimpan definisi dalam file sendiri di namespace yang sesuai. Jauh lebih mudah untuk menemukan cara itu, dan strateginya mengikuti pola one-object-per-file, yang bagus untuk digunakan dengan kelas dan antarmuka juga.
sumber
Saya pikir itu tergantung pada ruang lingkup enum. Sebagai contoh jika enum khusus untuk satu kelas, misalnya digunakan untuk menghindari skenario konstanta sihir, maka saya akan mengatakan memasukkannya ke file yang sama dengan kelas:
Jika enum bersifat umum dan dapat digunakan oleh beberapa kelas untuk skenario yang berbeda, maka saya akan cenderung menggunakan memasukkannya ke dalam file sendiri. Misalnya, di bawah ini dapat digunakan untuk beberapa tujuan:
sumber
Saya cenderung untuk meletakkan enums di file mereka sendiri untuk alasan yang sangat sederhana: seperti halnya dengan kelas dan struct, senang mengetahui secara tepat ke mana harus mencari jika Anda ingin menemukan definisi tipe: dalam file dengan nama yang sama. (Agar adil, di VS Anda selalu dapat menggunakan "Go to Definition," juga.)
Jelas, itu bisa lepas kendali. Seorang kolega tempat saya bekerja bahkan membuat file terpisah untuk delegasi.
sumber
Salah satu keuntungan menggunakan file terpisah untuk enums adalah Anda dapat menghapus kelas asli yang menggunakan enum dan menulis kelas baru menggunakan enum.
Jika enum tidak tergantung dari kelas asli maka memasukkannya ke dalam file terpisah membuat perubahan di masa depan lebih mudah.
sumber
Jika Anda menggunakan add-in Browser File USysWare untuk Visual Studio, Anda dapat dengan cepat menemukan file dengan nama tertentu dalam solusi Anda. Bayangkan mencari enum yang tidak ada dalam file sendiri tetapi malah dikubur dalam beberapa file dalam solusi raksasa.
Untuk solusi kecil, itu tidak masalah, tetapi untuk solusi besar, menjadi semakin penting untuk menjaga kelas dan enum dalam file mereka sendiri. Anda dapat dengan cepat menemukan mereka, mengeditnya, dan banyak lagi. Saya sangat, sangat merekomendasikan menempatkan enum Anda di file sendiri.
Dan seperti yang dinyatakan ... Seberapa boros file yang akhirnya hanya menjadi beberapa kb?
sumber
Sangat besar keuntungannya untuk memisahkan file. Ketika objek apa pun dalam file MyObjectName.cs sendiri ... Anda dapat pergi ke explorer solusi dan ketik MyObjectName.cs dan ditampilkan tepat 1 file. Apa pun yang membuat debugging lebih baik itu bagus.
Keuntungan lain pada catatan yang sama, jika Anda mencari semua file ( ctrl+ shft+ F) untuk sebuah nama, Anda dapat menemukan 20 referensi untuk nama dalam file yang sama ... dan nama yang ditemukan akan menjadi bagian dari objek yang berbeda. Di jendela Temukan Hasil, Anda hanya dapat melihat nomor baris dan nama file. Anda harus membuka file dan gulir untuk mencari tahu di mana objek referensi yang ditemukan berada.
Apa pun yang membuat proses debug lebih mudah, saya suka.
sumber
Jika Anda memiliki banyak proyek dalam satu solusi. Maka lebih baik buat proyek lain
Utilities
. Kemudian buat Folder\Enumerations
dan buat bersarangstatic class
. Dan kemudian tetapkan setiap kelas statis di mana Anda akan membuat enum yang sesuai dengan nama proyek Anda. Misalnya Anda memiliki proyek bernama DatabaseReader dan DatabaseUsers maka Anda dapat memberi nama seperti kelas statisKemudian seluruh enum yang dapat digunakan dalam seluruh solusi per proyek akan dinyatakan di dalamnya. Gunakan #
region
untuk memisahkan setiap masalah. Dengan ini, lebih mudah untuk mencari enumsumber
Saya suka memiliki satu file enum publik bernama E yang berisi masing-masing enum yang terpisah, maka enum apa pun dapat diakses dengan E ... dan mereka berada di satu tempat untuk dikelola.
sumber