[解決済み] C#のenumとマッチングプロパティの命名規則
質問
私はよく、ある種の独自のステータスプロパティをenumとして保持しているクラスを実装していることに気づきます。私は、Status 列挙型と Status 型の ONE Status プロパティを持っています。この名前の衝突はどのように解決すればよいでしょうか。
public class Car
{
public enum Status
{
Off,
Starting,
Moving
};
Status status = Status.Off;
public Status Status // <===== Won't compile =====
{
get { return status; }
set { status = value; DoSomething(); }
}
}
もし Status 列挙型が異なる型に共通であれば、クラスの外に置いて問題は解決するでしょう。しかし、StatusはCarにしか適用されないので、クラスの外で列挙を宣言するのは意味がありません。
この場合、どのような命名規則を使用するのでしょうか?
注意: この質問は、以下の回答に対するコメントで部分的に議論されました。 この質問 . でなかったので メイン の質問ではなかったので、あまり注目されませんでした。
編集: Filip Ekberg は、'Status' の特定のケースのための IMO 素晴らしい回避策を提案しています。しかし、enum/property の名前が異なる場合、Michael Prewecki の 回答 .
EDIT2 (2010年5月)。私のお気に入りの解決策は、Chris S が提案したように、enum 型名を複数形にすることです。MS のガイドラインによると、これはフラグ enum にのみ使用されるべきです。しかし、私はこの方法がますます好きになりました。私は今、通常の列挙型にもこれを使用しています。
どのように解決するのですか?
私の1ユーロをこの議論に加えますが、おそらく何も新しいことは追加されないでしょう。
明白な解決策は、Status をネストされた Enum から移動することです。ほとんどの .NET 列挙型は (Windows.Forms 名前空間の一部を除いて) 入れ子になっておらず、API を消費する開発者にとって、クラス名をプレフィックスとして使用しなければならず、煩わしいものです。
言及されていない 1 つのこと は、MSDN のガイドラインによると、フラグ列挙型は は複数形の名詞である というもので、おそらくすでにご存じでしょう (Status は単純な列挙型なので、単数形の名詞を使用すべきです)。
State(Statesという列挙型)はvocative、quot;Status"は名詞のnominativeで、英語は他の言語と同じくラテン語から吸収したものです。Vocativeは名詞の状態を表すもので、nominativeは動詞の主語です。
ということは、言い換えれば、車が が動いているとき という動詞があり、movingがその状態です。しかし、車が発進するのではなく、エンジンが発進するのです。また、エンジンがかかるのでもありません(あなたはここで例を選んだのでしょうから、これは関係ないかもしれません)。
public class Car
{
VehicleState _vehicleState= VehicleState.Stationary;
public VehicleState VehicleState
{
get { return _vehicleState; }
set { _vehicleState = value; DoSomething(); }
}
}
public enum VehicleState
{
Stationary, Idle, Moving
}
Stateは一般名詞なので、どのような状態を指しているのかを記述した方が良いのではないでしょうか?私が上でやったように
タイプの例も、私の見解では、リーダーのタイプに言及しているのではなく、そのデータベースに言及しています。私は、リーダーのデータベース製品を説明しているのであれば、それが望ましいと思いますが、それは必ずしもリーダーのタイプに関連しているわけではありません (たとえば、リーダーのタイプはフォワードのみ、キャッシュなどかもしれません)。そこで
reader.Database = Databases.Oracle;
実際には、enumを使う代わりにドライバと継承チェーンとして実装されているため、このようなことは起こりません。
関連
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】ソケットのアドレス(プロトコル/ネットワークアドレス/ポート)は、通常1つしか使用できない?
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
[解決済み] git リポジトリの命名規則はありますか?
-
[解決済み] Pythonの変数名や関数名の命名規則について教えてください。
-
[解決済み] Javaでenumを繰り返し処理するためのforループ
-
[解決済み] C#の定数の命名規則?
-
[解決済み】列挙型の命名規則 - 複数形
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み】列挙型の命名規則 - 複数形