C # 'daki numaralandırmaların kendi dosyaları olmalı mı? [kapalı]


178

Bir numaralandırma kullanan bir sınıf var, enum şu anda kendi dosyasında savurgan görünüyor.

Tüketildikleri bir dosyanın ad alanına yerleştirilen numaralandırmalar hakkında genel görüş nedir? Yoksa enum gerçekten kendi cs dosyasında yaşamalı mı?

Düzenle

Söz konusu sınıf bu numaralandırmaları kullanırken dış arayanlar için de geçerlidir. Başka bir deyişle, başka bir sınıf bu numaralandırmaları ayarlayabilir. Bu nedenle, sınıfa dahili olarak kullanılmazlar, aksi takdirde bu soru beyinsiz olur.


86
Eğer sihirli sayılar kullansaydın, bu problemi yaşamazsın
MusiGenesis

7
Bu topluluk wiki mi olmalı? IDE yetenekleri dışında doğru bir cevap ve gerçek teknik kaygılar yoktur.
Jeff Sternal

1
Farklı dosyalarda olsalar bile aynı ad alanında olabilirler. Eğer. Ancak aksi takdirde, ad alanlarını yanlış anlamış olabilirsiniz ve bunlar hakkında okumalısınız - (onlar için çok fazla değil, sadece bir organizasyon mekanizması)
Jason Kleban

1
Kendi dosyasında enum bildirilmesi, programcının komut penceresini kullanarak
enum'u

Yanıtlar:


103

Ben "savurgan" demezdim (ekstra bir dosya ücreti ne kadar?), Ama genellikle uygunsuz. Genellikle enum ile en yakından ilişkili bir sınıf vardır ve onları aynı dosyaya koydum.


7
Tarama yaparken dizine gürültü ekler, bu savurgan demekti.
Finglas

117
@Finglas - bir kişinin gürültüsü başka bir kişinin sinyalidir!
Jeff Sternal

6
Genellikle en yakından ilişkili bir sınıf vardır. Ancak bu değişirse, birisi bir seferde gelirse, numaralandırmaya bağımlı olmaya karar verirse, o zaman bir refactor zamanı.
Brennan Pope

2
Numaralandırma farklı sınıflar arasında paylaşılacaksa, ayrı bir dosyaya yerleştirilmesi tercih edilir.
Konrad

76

Bu gerçekten sadece bir tercih meselesi.

Her numaralandırmayı kendi dosyasına koymayı tercih ederim (her arayüz, sınıf ve yapı için, ne kadar küçük olursa olsun). Başka bir çözümden geldiğimde onları bulmayı kolaylaştırıyor ya da başka türlü söz konusu türe bir referansım yok.

Her dosyaya tek bir tür koymak, kaynak kontrol sistemlerindeki değişiklikleri fark etmeden tanımlamayı da kolaylaştırır.


10
"Her dosyaya tek bir tür koymak, kaynak kontrol sistemlerindeki değişiklikleri fark etmeden tanımlamayı da kolaylaştırır." Farklılık korkusu, tasarım kararlarınızın temelini oluşturmamalıdır. Hatta bir dosyayı kaynak kontrolünde düzgün bir şekilde nasıl ayırt edeceğini bilmeyen herkesin kaynak kontrolünü hiç kullanmadığını bile iddia edebilirim.
Dan Bechard

59

Bu tamamen bir stil meselesi. Yapma eğilimim Enums.cs, enum bildirimlerinin toplandığı çözümde adlandırılan bir dosyaya sahip olmak .

Ancak bunlar genellikle F12anahtar aracılığıyla bulunur .


4
Bu muhtemelen en iyi seçenek olduğunu düşünüyorum: 1) dizin yerine dağınık olarak kabul edilebilir birçok yerine sadece bir dosya 2) dosya içinde ne açıktır 3) enumyerine nerede bulmak için biliyorum anlamına gelir o ilgili bir sınıf içeren bir dosya içinde olmak değil, mutlaka tek sınıf kullanmadan
dav_i

6
Bunu kesinlikle sevmiyorum. James Curran'ın cevabında belirtildiği gibi, sıralamalar çoğunlukla sınıflarla bir ilişkiye sahiptir. Hepsini tek bir global dosyaya koyarken, artık tematik olarak ait olabilecekleri bir dizinde bile (bir alt ad alanı için) bulunmuyorlar.
Ray

3
Evet @ DebugErr, sana katılıyorum. Bu yanıt 2010 yılında geri gönderildiği için, çeşitli yaklaşımlar arasında değiştim ve tür başına bir dosyaya gitme veya ilgili sınıfla aynı dosyada numaralandırma bildirme eğilimindeyim.
Fredrik Mörk

@Ray ...enums have a relation to classes mostly.. Beni burada kaybettin. Lütfen birkaç sınıfla ilişkisi olan sıralamaları nasıl ele alacağınıza bir örnek verin?
K - SO'da toksisite artıyor.

@KarlMorrison Lütfen, bu yorum 5 yaşında. Her neyse, "çoğunlukla" kelimesini bir sebeple ekledim. Numaralandırmaların ad alanları gibi sınıflardan daha fazlası ile ilişkisi vardır. AnchorStyleBir UI kütüphanesinde kullanılan bir numaralandırma olsaydı, genellikle bir UI alt ad alanı ve ilgili klasöre sahip olurdum. Daha sonra AnchorStyle.cs, genel olarak "Enums.cs" dosyasında değil, kolayca bulabildiğim UI klasöründeki bir dosyaya yerleştirirdim.
Ray

47

Kendinize sormanız gereken soru şudur: C # 'da numaralandırma türü hakkında oluşturduğum diğer tüm türlerden farklı davranmam gerektiğini belirten bir şey var mı?

Sayım herkese açıksa, diğer herhangi bir kamu türü gibi ele alınmalıdır. Özelse, onu kullanarak sınıfın iç içe bir üyesi olarak bildirin. Sadece bir numaralandırma olduğu için iki ortak türü aynı dosyaya koymak için zorlayıcı bir neden yoktur. Herkese açık bir tür olması önemli olan şeydir; türü lezzet değil.


Numaraları aynı kurumsal projenin farklı bir çözümünde yeniden kullanmak isterseniz ne olur? Numaralandırma kullanarak sınıfları bağlamak, yeniden kullanmak çok zor olacaktır.
mko

@mko: Proje referansı zaten hem sınıfın hem de enum'un farklı çözümlere açık olacağı anlamına geliyor. Ne zorlaştırır?
Bryan Watts

Tabii, ama sadece sınıfları kullanmak istiyorsanız tüm sınıfı mantığıyla paylaşmak istiyor musunuz? Dahası, farklı sınıflar aynı numaralandırmayı paylaşırsa. Nereye yerleştirirdin?
mko

@mko: Bir proje referansıyla, farklı dosyalarda olsun ya da olmasın her iki türü de alırsınız. Ne istediğini bulmakta zorlanıyorum.
Bryan Watts

Ben proje referansından bahsetmiyorum. Numaralandırmaları paylaşılan bir proje dosyasına taşıma ve tüm sınıfları göstermeden birden fazla projede yeniden kullanabilme hakkında konuşuyorum. "Yalnızca bir numaralandırma olduğu için aynı dosyaya iki genel tür koymak için zorlayıcı bir neden yok" diyorsunuz. Belki de açıklamamı takip ederseniz, tüm numaralandırmaları aynı dosyaya koymanız için bir neden olabilir.
mko

24

Her türü (sınıf, yapı, enum) kendi dosyasına koymanın bir diğer avantajı da kaynak denetimidir. Türün tüm geçmişini kolayca alabilirsiniz.


18

Çoğunlukla isim alanına ve sınıfın dışına yerleştiriyorum, böylece bu isim alanındaki diğer sınıflara kolayca erişilebilir.

namespace UserManagement
{
    public enum UserStatus { Active, InActive }
    class User
    {
        ...
    }
}

Vay. Enumların doğrudan ad alanına yerleştirilebileceğini bilmiyorum. Bu cevap ile gidiyorum. Benim MVC yapısı içinde onlar bana mantık yapan denetleyicinin içine yerleştirilir. Bunun için teşekkürler. Upvoted.
C4d

11

Genellikle enumlarımın büyük olasılıkla bir niteliği olan Sınıf ile aynı dosyada olmasını tercih ederim. Örneğin ben bir sınıf varsa Tasko zaman numaralandırma TaskStatusaynı dosyada olacaktır.

Ancak, daha genel bir doğaya sahip numaralandırmalar varsa, onları çeşitli dosyalarda bağlamsal olarak tutarım.


Farklı sınıflar aynı numaralandırmayı kullanırsa ne olur?
mko

2
mko - Bu yüzden (2010'da bunu cevapladığımda geri döndüm) dedim daha genel bir doğa varsa onları ayrı dosyalarda saklıyorum. Bağlamsal olarak, bazı durumlarda bazı numaralandırmaların ayrı bir dosyada olabileceğini ve diğer durumlarda, bir dizi numaralandırma bildirimini tek bir dosyada gruplayabileceğim anlamına geliyordum.
Nikos Steiakakis

10

Hangi erişimin gerekli olduğuna bağlıdır.

Numaralandırma yalnızca tek bir sınıf tarafından kullanılıyorsa, bu sınıf içinde bildirilmesi uygundur, çünkü başka bir yerde kullanmanıza gerek yoktur.

Birden fazla sınıf tarafından veya ortak bir API'da kullanılan numaralandırmalar için, tanımı her zaman kendi dosyasında uygun ad alanında tutacağım. Bu yolu bulmak çok daha kolay ve strateji dosya başına bir nesne modelini izliyor ve bu da sınıflar ve arabirimlerle birlikte kullanması iyi.


8

Bence bu sayımın kapsamına bağlı. Örneğin, enum bir sınıfa özgü ise, örneğin sihirli sabit senaryodan kaçınmak için kullanılırsa, o zaman sınıfla aynı dosyaya koy diyebilirim:

enum SearchType { Forward, Reverse }

Enum genelse ve farklı senaryolar için çeşitli sınıflar tarafından kullanılabiliyorsa, onu kendi dosyasına koymaya eğilimliyim. Örneğin, aşağıdakiler çeşitli amaçlar için kullanılabilir:

enum Result { Success, Error }

6

Çok basit bir nedenden dolayı enumları kendi dosyalarına koyma eğilimindeyim: sınıflar ve yapılarda olduğu gibi, bir türün tanımını bulmak isteyip istemediğinizi tam olarak bilmek iyi bir şey: aynı addaki dosyada. (Adil olmak gerekirse, VS'de her zaman "Tanıma Git" seçeneğini de kullanabilirsiniz.)

Açıkçası, kontrolden çıkabilir. Çalıştığım bir meslektaşım delegeler için ayrı dosyalar bile yapıyor.


6

Numaralandırmalar için ayrı bir dosya kullanmanın avantajlarından biri, numaralandırmayı kullanan orijinal sınıfı silmeniz ve numaralandırmayı kullanarak yeni bir sınıf yazabilmenizdir.

Numaralandırma orijinal sınıftan bağımsızsa, onu ayrı bir dosyaya koymak gelecekteki değişiklikleri kolaylaştırır.


6

Visual Studio için USysWare Dosya Tarayıcı eklentisini kullanıyorsanız, çözümünüzde belirli adlara sahip dosyaları çok hızlı bir şekilde bulabilirsiniz. Kendi dosyasında olmayan, ancak devasa bir çözümde bir dosyaya gömülmüş bir numaralandırma aradığınızı düşünün.

Küçük çözümler için önemli değil, ancak büyük olanlar için sınıfları ve numaralandırmaları kendi dosyalarında tutmak daha da önem kazanıyor. Onları hızlı bir şekilde bulabilir, düzenleyebilir ve daha fazlasını yapabilirsiniz. Enum'unuzu kendi dosyasına koymanızı şiddetle tavsiye ederim.

Ve belirtildiği gibi ... Zaten sadece birkaç kb olan bir dosya ne kadar savurgan?


Bu eklentiyi de kullanıyorum, oldukça kullanışlı. Çözüm büyük ya da küçük olursa olsun, enum'ları kendi dosyalarına koyardım.
Rui Jarimba

5

Dosyayı ayırmak için çok basit büyük avantaj. Herhangi bir nesne kendi MyObjectName.cs dosyasındaysa ... çözüm gezginine gidebilir ve MyObjectName.cs yazabilir ve tam olarak 1 dosya gösterilebilir. Hata ayıklamayı daha iyi yapan her şey güzeldir.

Benzer bir notun başka bir avantajı, bir ad için tüm dosyaları ( ctrl+ shft+ F) ararsanız, aynı dosyadaki isme 20 referans bulabilirsiniz ... ve bulunan ad farklı nesnelerin bir parçası olacaktır. Sonuçları Bul penceresinde görebileceğiniz tek şey satır numarası ve dosya adıdır. Dosyayı açmanız ve bulunan başvurunun hangi nesnede olduğunu bulmak için kaydırmanız gerekir.

Hata ayıklamayı kolaylaştıran her şeyi seviyorum.


3

Tek bir çözümde birden fazla projeniz varsa. Sonra başka bir proje daha iyi oluşturun Utilities. Sonra bir Klasör \Enumerationsoluşturun ve bir yuva oluşturun static class. Ardından, projelerinizin adına karşılık gelen enum oluşturacağınız her statik sınıfı atayın. Örneğin, DatabaseReader ve DatabaseUsers adında bir projeniz var, statik sınıfı şöyle adlandırabilirsiniz

public static class EnumUtility {
    #region --Database Readers Enum
    public static class EnumDBReader {
         public enum Actions { Create, Retrieve, Update, Delete}; 
    }
    #endregion

    #region --Database Users Enum
    public static class EnumDBUsers {
         public enum UserIdentity { user, admin }; 
    }
    #endregion

}

Daha sonra proje başına tüm çözümlerde kullanılabilecek tüm numaralandırma üzerinde ilan edilecektir. regionHer bir endişeyi ayırmak için # tuşunu kullanın . Bununla, herhangi bir numaralandırma aramak daha kolaydır


1

Her ayrı numarayı içeren E adında bir genel numaralandırma dosyasına sahip olmayı seviyorum, daha sonra herhangi bir numaraya E ... ile erişilebilir ve yönetmek için tek bir yerde bulunur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.