web-dev-qa-db-ja.com

列挙型、抽象クラス、および構造体にプレフィックスを付けないのはなぜですか?

C#コミュニティは、「I」接頭辞をユビキタスに使用して、最も経験の浅いプログラマーでも使用することを知っているインターフェイスを示しています。

列挙型、抽象クラス、または構造体のプレフィックスを付けないのはなぜですか(おそらく "E"、 "A"、 "S"がそれぞれ付いている可能性があります)?

たとえば、すべての抽象クラスに「A」のマークを付けた場合、それはその型に関する貴重な情報を提供しますが、推測はできるかもしれませんが、すぐにはわかりません。

私はこの変更を主張するのではなく、なぜ私たちがこのようにしていないのかを理解しようとしているだけであることに注意してください。

このスレッド プレフィックス「I」を使用する理由は回答しますが、他のプレフィックスを使用しない理由は回答しません 。

11
Stephen

インターフェースの命名規則の要点は、クラスが実装するインターフェースを何と呼ぶか​​について、すばやく簡単に判断できるようにすることです。あなたがFrobnicatorを持っているが、デカップリングまたは何らかの理由でインターフェースを宣言する必要がある場合、それをIFrobnicatorと呼ぶ決定は意識的な思考を必要とせず、これは良いことです。

同じ問題は、名前を付ける他の構成には当てはまりません。列挙型と構造体は便利ですが、名前自体に加えてsecond、短く、透明で、明らかに関連する名前を見つける必要はありません。したがって、列挙型または構造体の名前に「E」を付ける必要はありません。

(抽象クラ​​スはインターフェイスにいくらか似ています。何かを実行するために2番目の具体的なクラスを提供する必要があるため、「A」で始まる規則を取得している可能性がありますが、何らかの理由で取得していません。私は推測することを許されています、私は「私」が特に狭い手紙であることはそれと何らかの関係があったかもしれないと思います)

27
Kilian Foth

私はそれがあまり使われていないと思います:

  • ほとんどの場合、それが列挙型、抽象クラス、または構造体の場合、あまり問題にならない
  • それが母校である場合、私はおそらくそれを使用法から見ることができ、そうでなければかなり迅速に見つけることができます
  • 列挙型、抽象クラス、または構造体に変更した場合は、名前も変更する必要があります
  • 慣習を知らない人にとって、それは純粋なノイズです。
  • ハンガリー語の表記法を使用しないように指導されているため、人々はアイデア全体を却下するかもしれません。 Apps HungarianとSystems Hungarianを区別せずに、Hungarion表記を使用するべきではないと言う人は今もいます。素敵な議論は this SO question にあります。最初の答えは面白いだけでなく、すばらしい答えやコメントがあります。同じ質問から来ます この記事 ジョエル・スポルスキー(「私はハンガリーです」までスクロールします)

要するに:一般に、付加価値はコストに加算されません。

その最後の箇条書きといくつかの解釈から、結論を出すことができます。システムハンガリー語(プレフィックスタイプ)は不良であるため、使用しないでください。 Apps Hungarian(プレフィックスの種類)で使用されています。

それをあなたの質問に戻しますあなたの提案された表記はApps Hungarianの形式だと思います。付加価値がコストに追加され、コードベースに一貫してそれを実装すると感じれば、それは問題ありません。ただし、プロジェクトごとに考慮する必要があるため、これは一般的なルールではありません。

私は人々がそれがインターフェースに対してより頻繁に重要であったことに気づいたと思います、そしてそれがインターフェースの一般的なルールになっている理由です。

1
KeesDijk