列挙型を使用するクラスがあります。列挙型は現在、独自のファイルにあり、無駄に見えます。
列挙型が消費されるファイルの名前空間内に配置される列挙型に関する一般的な意見は何ですか?または、列挙型は実際に独自のcsファイルに存在する必要がありますか?
編集する
問題のクラスがこれらの列挙を使用する一方で、外部の呼び出し元も使用することを述べておかなければなりません。つまり、別のクラスがこれらの列挙を設定できます。したがって、これらはクラスの内部では使用されません。それ以外の場合、この質問は簡単です。
列挙型を使用するクラスがあります。列挙型は現在、独自のファイルにあり、無駄に見えます。
列挙型が消費されるファイルの名前空間内に配置される列挙型に関する一般的な意見は何ですか?または、列挙型は実際に独自のcsファイルに存在する必要がありますか?
編集する
問題のクラスがこれらの列挙を使用する一方で、外部の呼び出し元も使用することを述べておかなければなりません。つまり、別のクラスがこれらの列挙を設定できます。したがって、これらはクラスの内部では使用されません。それ以外の場合、この質問は簡単です。
回答:
「無駄」とは言いませんが(追加のファイルにいくらかかりますか?)、それはしばしば不便です。通常、列挙型と最も密接に関連しているクラスが1つあり、それらを同じファイルに配置します。
これは本当に好みの問題です。
私はそれぞれの列挙を独自のファイルに置くことを好みます(どのように小さくても、各インターフェース、クラス、および構造体について同様です)。別のソリューションを使用している場合や、問題の型への参照がまだない場合に、見つけやすくなります。
また、各ファイルに単一のタイプを入れると、ソース管理システムの変更を区別することなく簡単に識別できます。
これは完全にスタイルの問題です。私がしがちなことはEnums.cs、列挙型宣言が収集されるソリューションでファイルを呼び出すことです。
しかし、それらは通常、F12とにかくキーを介して見つかります。
enum代わりにどこを見つけるか知っているということ関連するクラスを含むファイルにあるが、必ずしもそれを使用する唯一のクラスではない
...enums have a relation to classes mostly.。これはあなたが私を失った場所です。複数のクラスに関連する列挙型をどのように処理するか、例を挙げてください。
AnchorStyleUIライブラリ全体で列挙型を使用した場合、通常、UIサブ名前空間と対応するフォルダーも取得します。次に、それをAnchorStyle.cs一般的な名前の「Enums.cs」ファイルではなく、簡単に見つけられるUIフォルダー内のファイルに配置します。
自問する質問は次のとおりです。C#の列挙型について、他のすべての型とは異なる扱いをする必要があることを示すものはありますか?
列挙がパブリックの場合、他のパブリックタイプと同様に扱う必要があります。プライベートの場合は、それを使用するクラスのネストされたメンバーとして宣言します。1つが列挙型であるという理由だけで、2つのパブリックタイプを同じファイルに入れる理由はありません。それがパブリックタイプであるという事実はすべての問題です。タイプのフレーバーはしません。
一般に、列挙型はクラスと同じファイルにあることをお勧めします。それはおそらくそれが属性になるでしょう。たとえば、クラスがあるTask場合、列挙型TaskStatusは同じファイルにあります。
ただし、より一般的な性質の列挙型がある場合は、状況に応じてさまざまなファイルに保持します。
それは列挙型のスコープに依存すると思います。たとえば、列挙が1つのクラスに固有である場合、たとえば、魔法の定数のシナリオを回避するために使用される場合は、クラスと同じファイルにそれを配置します。
enum SearchType { Forward, Reverse }
列挙型が一般的で、さまざまなシナリオのいくつかのクラスで使用できる場合、それを独自のファイルに入れて使用する傾向があります。たとえば、以下はいくつかの目的に使用できます。
enum Result { Success, Error }
Visual Studio用のUSysWare File Browserアドインを使用している場合、ソリューション内の特定の名前のファイルを非常にすばやく見つけることができます。独自のファイルではなく、巨大なソリューションのいくつかのファイルに埋め込まれている列挙型を探すことを想像してみてください。
小さなソリューションの場合は問題ありませんが、大きなソリューションの場合は、クラスと列挙型を独自のファイルに保持することがますます重要になります。それらをすばやく見つけたり、編集したりできます。enumを独自のファイルに入れることを強くお勧めします。
そして述べられたように...結局数キロバイトだけになるファイルはどれほど無駄なのでしょうか?
ファイルを分離することの非常にシンプルで大きな利点。オブジェクトが独自のMyObjectName.csファイルにある場合...ソリューションエクスプローラーに移動してMyObjectName.csと入力すると、1つのファイルのみが表示されます。デバッグを改善するものは何でもいいです。
同様のメモのもう1つの利点は、すべてのファイル(ctrl+ shft+ F)で名前を検索すると、同じファイル内にその名前への20の参照が見つかる可能性があることです。その見つかった名前は、異なるオブジェクトの一部になります。[結果の検索]ウィンドウで確認できるのは、行番号とファイル名だけです。ファイルを開いてスクロールし、見つかった参照が含まれているオブジェクトを特定する必要があります。
デバッグを容易にするものなら何でも好きです。
1つのソリューションに複数のプロジェクトがある場合。次に、別のプロジェクトを作成しますUtilities。次に、フォルダ\Enumerationsを作成し、ネストされたを作成しますstatic class。次に、プロジェクトの名前に対応する列挙型を作成する各静的クラスを割り当てます。たとえば、DatabaseReaderとDatabaseUsersという名前のプロジェクトがある場合、静的クラスに次のような名前を付けます。
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
}
次に、プロジェクトごとのソリューション全体で使用できる列挙型全体が宣言されます。#regionを使用して各懸念事項を区切ります。これにより、列挙型を探すのが簡単になります