Enum、Abstractクラス、およびStructsのプレフィックスを付けないのはなぜですか?


11

C#コミュニティは、最も経験の浅いプログラマーでさえ使用することを知っているインターフェイスを示すために、「I」プレフィックスを広く使用しています。

列挙型、抽象クラス、または構造体の接頭辞を付けないのはなぜですか(おそらくそれぞれ「E」、「A」、「S」を使用)。

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

私はこの変更を支持していないことに注意してください。私たちがこのように物事をしない理由を理解しようとしているだけです。

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


3
私は、重複密接に投票だろうが、答えはSOの上でstackoverflow.com/questions/111933/...
陶酔

1
@Euphoric:この質問はもっと具体的です。
reinierpost


IMO列挙型は避けて(パブリック静的読み取り専用メンバー(enumパターン)に置き換え)、抽象クラスには「ベース」サフィックスを付け、構造体に命名規則として小文字を使用する必要がありますが、.NETはそうしないため、構造体を小文字にすると、一貫性がなくなるため、混乱を招きます。
デイブCousineau

擬似列挙型を作成するために列挙型を使用するのを避けるのはなぜですか?
スティーブン

回答:


27

インターフェースの命名規則のポイントは、クラスが実装するインターフェースを何と呼ぶか​​について、頭脳なしの迅速な決定を提供することです。を持っているがFrobnicator、デカップリングまたは何らかの理由でインターフェイスを宣言する必要がある場合、それを呼び出す決定IFrobnicatorは意識的な思考を必要とせず、これは良いことです。

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

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


5
+1これは私が書いたであろう答えです。その抽象クラスがすでに抽象クラスの名前が完全にcromulent命名規則を、持っているのに私が指摘したいAnimalBaseと明確な味があるAnimalGiraffeAnimalLionなど
バイナリ心配性

それは多くのJavaインタフェースを使用していない言及する価値があるかもしれない「I」、のようなList、非常に技術的な名前のため、ArrayListおよびLinkedList実装の名前があります。(C#、私は信じてIListいる、インターフェイスListとして、および配列リストとして)
Katana314

Microsoft がに影響を与えるかどうかの混乱を避けるために、「可変」構造型の変数に特定のプレフィックスを与えることを推奨したのは、いつか役に立つかと思います。振り返ってみると、C#がクラスフィールドアクセスと構造体フィールドアクセスに使用することを望んでいましたが、明らかにそうではありません。それでも、一目でそれらを区別する方法が役立つと思われます。Point p = myPoints[3]; p.X += 3;myPoints[3].Xvar->fieldvar.field
supercat

1

私はそれがあまり使用されていないと思う:

  • ほとんどの場合、enum、abstractクラス、またはstructの場合、あまり関係ありません
  • それが重要であれば、私はおそらく使用法からそれを見ることができ、そうでなければかなり迅速に見つけることができます
  • 列挙型、抽象クラス、または構造体に変更する場合は、名前も変更する必要があります
  • 慣習を知らない人にとっては純粋なノイズです。
  • ハンガリーの表記法を使用しないように教えられているため、人々はアイデア全体を単に却下するかもしれません。Apps HungarianとSystems Hungarianを区別せずに、Hungarion表記を使用しないでくださいと言う人がいます。このSO質問で良い議論を見つけることができます。最初の回答だけが興味深いのではなく、素晴らしい回答とコメントがあります。その同じ質問から、ジョエル・スポルスキーによるこの記事が出ます(「I'm Hungary」の段落にスクロールしてください)

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

その最後の箇条書きといくつかの解釈から結論づけることができます。Systems Hungarian(プレフィックスタイプ)は不良であり、使用しないでください。Apps Hungarian(プレフィックスの種類)で使用しています。

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

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


-1

ちょうど(願わくば適用可能)考え:

具体的なクラスではなく、「インターフェースへのコーディング」に向かう明らかな傾向があります。「今日」では、インターフェイスに文字「I」を付けるのではなく、クラスを「C」で開始するなど、クラスの命名規則を使用する方がほとんど有益です。

インターフェースのすべてが実際にModelと呼ばれるJavaプロジェクトを終了しました。 :

public interface SomethingModel{
}

public class Something implements SomethingModel{
    //lets not line up braces and make it hard to read
    //at least it saves one line
}

一方、C#では

public interface ISomething{}

public class SomethingModel : ISomething
{
   //i can read this
}

それをまっすぐ傷つけるように私の脳を再配線しますが、インターフェイスへのプログラミングの用語を考えるのにどのように役立つかを見ることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.