11

インターフェイス名の前に I を付ける .NET 標準は広く普及しているようで、もはや .NET だけに限定されているわけではありません。私は、この規則を使用する多くの Java コードに出くわしました (したがって、Java が C# よりも前にこの規則を使用していたとしても驚かないでしょう)。Flexもそれを使用します。名前の先頭にある I の配置は、ハンガリー語の表記法に似ているため、使用するのが不快です。

したがって、問題は、何かがクラスではなくインターフェースであることを示す別の方法があるか、とにかくこのように示す必要があるかということです。それとも、それが標準になった場合なので、それを受け入れて、別の方法で行うことを提案して「宗教戦争」を扇動しようとするのをやめるべきですか?

4

9 に答える 9

20

フレームワーク設計ガイドラインの本から:

階層のルートを表すインターフェイス (IList など) も、名詞または名詞句を使用する必要があります。機能を表すインターフェイスでは、形容詞と形容詞句 (IComparable、IFormattable など) を使用する必要があります。

また、インターフェイスの命名に関する注釈から:

KRZYSZTOF CWALINA: 使用される数少ないプレフィックスの 1 つは、インターフェイス (ICollection など) の「I」ですが、これは歴史的な理由によるものです。振り返ってみると、通常の型名を使用したほうがよかったと思います。ほとんどの場合、開発者は、たとえば、何かがインターフェースであって抽象クラスではないことを気にしません。

BRAD ABRAMS: 一方、インターフェイスの「I」プレフィックスは、.NET Framework に対する COM (および Java) の影響を明確に認識したものです。COM は、インターフェイスが「I」で始まる表記法を普及させ、制度化さえしました。この歴史的なパターンからの逸脱について議論しましたが、非常に多くのユーザーが既に COM に精通しているため、このパターンを引き継ぐことにしました。

JEFFREY RICHTER: 個人的には、「I」の接頭辞が好きで、このようなものがもっとあればいいのにと思います。わずか 1 文字の接頭辞は、コードを簡潔に、しかも説明的に保つのに大いに役立ちます。前に述べたように、私はプライベート タイプ フィールドに接頭辞を使用しています。これは非常に便利だからです。

BRENT RECTOR 注: これは、実際にはハンガリー語表記法の別のアプリケーションです (ただし、変数名での表記法使用の欠点はありません)。

それは非常に広く採用されている標準になっています.ハンガリー語の形式ですが、ブレントが述べているように、変数名にハンガリー語表記を使用することの欠点に悩まされることはありません.

于 2008-10-21T16:19:56.957 に答える
16

正直なところ、私はそれを受け入れます。ハンガリー記法に少し似ている(または少なくとも同じ乱用)ことについてあなたが何を意味するかは知っていますが、この場合、それは価値があると思います。

依存性注入が流行しているため、多くの場合、インターフェースと単一の製品実装で終わることがよくあります。I プレフィックスだけで簡単に区別できるようにすると便利です。

ちょっとしたデータ ポイント: 私は Java と C# の両方をかなりの量使用しており、特にコレクション フレームワークに関して、Java のどの型が実際にインターフェイスであるかを定期的に確認する必要があります。.NET はこれを単純にします。他の人は気にならないかもしれませんが、私は気になります。

私からのIFooの+1。

于 2008-10-21T16:19:25.740 に答える
10

.NET プログラマーとして (ほとんどの場合)、I単純な理由で Java のここを削除する慣例を実際に好みます。小さな再設計では、インターフェイスから抽象基本クラスへの変更、またはその逆の変更が必要になることがよくあります。名前を変更する必要がある場合は、多くの不要なリファクタリングが必要になる場合があります。

一方、クライアントの使用法は透過的である必要があるため、この型ヒントを気にする必要はありません。さらに、「Thingable」の「able」サフィックスはヒントとして十分です。Javaで十分に機能します。

I/EDIT:上記の理由により、プライベートプロジェクトのプレフィックスを削除するよう促されたことを指摘したいと思います. しかし、そのうちの 1 つを FxCop ルール セットと照合して確認したところ、すぐに の使用法に戻りましたI。ここでは一貫性が勝ちます、愚かな一貫性は小さな心のホブゴブリンです.

于 2008-10-21T16:20:15.177 に答える
1

スタイル読みやすさがすべてです。インターフェースの前に「I」を付けるのは、流行している命名規則とスタイル ガイドラインにすぎません。コンパイラ自体は気にしませんでした。

于 2008-10-21T16:18:00.627 に答える
0

あなたは代替案を求めたので、ここに私が遭遇したものがあります:

インターフェイス クラスではプレフィックスを使用しませんが、対応する具象クラスではcまたはCプレフィックスを使用します。ほとんどのコードは通常、インターフェイスを参照するため、一般的にあまり使用されていない具体的な型ではなく、プレフィックスで汚染するのはなぜですか。

このアプローチは、一部の具象型 (インターフェースが一致するもの) にプレフィックスが付けられ、他の型にはプレフィックスが付けられないという点で、1 つの矛盾をもたらします。これは、インターフェースが存在し、具象型よりもその使用を優先する必要があることを開発者に思い出させるため、役立つ場合があります。

正直なところ、はインターフェイスでプレフィックスを使用していますが、慣れて快適になったので、それ以上だと思います。

于 2009-04-01T14:10:11.443 に答える
0

私はいつも、この命名規則はちょっとした恐竜だと思っていました。最近の IDE は、何かがインターフェイスであることを伝えるのに十分強力です。これを追加すると、コードが読みにくくなるため、インターフェイスをクラスから分離する命名規則が本当に必要な場合は、実装クラスの名前に Impl を追加します。

public class CustomerImpl implements Customer
于 2009-01-05T20:24:28.910 に答える
0

.NET については、Microsoft の Framework Design Guidelines ブックで絶対に推奨されています。もちろん、これは非常に標準的なものです。それ以外の方法で行われたことは一度もありません。新しい慣習を作ることは、人々を混乱させるだけです。

ハンガリー語表記も嫌いだと付け加えておきますが、これと、クラス変数の前にアンダースコアを付ける場合は、コードがはるかに読みやすくなるため、私にとっては良い例外です。

于 2008-10-21T16:17:42.187 に答える
0

Symbian のコーディング標準には、I ではなく M で示されるインターフェイス (純粋な抽象 C++ クラス) があります。

それ以外の場合、インターフェイスを示す唯一の方法は、コンテキストを使用することです。

于 2008-10-21T16:16:47.010 に答える