2009-04-29 11 views
38

クラスの一般的なバージョンと標準的ではない(汎用ではない)バージョンを区別したいと考えています。 .NETフレームワークのように、インターフェイスやコレクションクラスのいくつかの汎用と非汎用のバージョンがあります。 (Queue,Queue(T)一般的なクラスのファイル名の規約

私は通常、ファイルごとに(Javaのように)1つのクラスの規約に従うのが好きです。単一の汎用クラスを含むファイルの命名規則は共通ですか?私は主にWindows(特にNTFS)に興味がありますが、(少なくとも少しは)ポータブルなコンベンションのようです。

+0

あなたはクラスの例を与えることができると.NETの非(おそらく、そもそも幻想的な考え方ではないでしょうか?)同じ名前の特定およびジェネリック型の両方ジェネリック型は、下位互換性のためにのみ存在します。 –

+2

"同じ名前の特定のタイプとジェネリックタイプの両方のクラスの例を挙げることができますか?" - あなたは1つの答えを提供しました:下位互換性が必要なクラスライブラリ! – Joe

答えて

29

をマイクロソフトでは、彼らはClassNameOfT.csを使用

+0

このように、かなり明確です。私はおそらくまだクラスを非ジェネリック版と同じ名前にします。 –

+3

私は彼らがどのように辞書のようなことをするのだろうと思うだろう。 DictionaryOfKT? – user7116

+8

ASP.NET MVC 1.0のソースコードでは、Dictionary'2.csの規約を使用しています。 – mckamey

1

方法について:

Type.cs 

と私は常に、ファイル名などの非ジェネリック型を一つのファイルに両方のタイプを入れている、過去にこれを行っているときはいつでも

TypeGeneric.cs 

。私は、.NETにはJavaのようにファイルごとに1つのタイプの規則/制限がないため、これでかなり明確になると思います。

しかし、もし私が上記のようなものを示唆し、接尾辞を使用すると、ファイルはアルファベット順リスト(ソリューションエクスプローラ、Windowsエクスプローラなど)で一緒に表示されます。ここで

は別のアイデアです:

Type`1.cs 

これは、あなたは、彼らが受け入れられたジェネリック型パラメータの数によって異なるジェネリック型を抜け出すことができるでしょう。私はまだ考えていますが、すべてのタイプを1つのファイルにまとめるほうが簡単だと思っています。

0

私はおそらくプロジェクト内にGereric、NonGenericなどのような2つのフォルダを持っているでしょう。それらは同じ名前空間に存在することができ、同じ名前のファイルを持つことができます。ちょうど考え...

+5

私は個人的に、異なるフォルダ内の同じ名前空間のクラスを避けようとします。明日の開発者の利益のために、フォルダ階層がネームスペース階層と一致するのが好きです。 – Joe

+0

十分に公正です。とにかく別のネームスペースに入れていると思います。 MyProjのようなもの。 MyProj.Generic。 – BFree

0

すべての新しいMicrosoftクラスはジェネリックを使用します。ジェネリックが出る前にQueueArrayListがそこにいました。ジェネリックは進歩的な方法です。

1つのクラス単位のファイルの規則は、クラス名の後にファイル名の名前を付けることです。 MyClassでは、MyClas.csを使用します。新しい名前空間ごとに、新しいフォルダを作成する必要があります。これはVisual Studioでも動作します。

1

私はおそらくそれらをフォルダに入れ、代わりに名前空間のメカニズムを使用します。 System.CollectionsとSystem.Collections.Genericを比較することができます。一方、クラスがジェネリックを使用するのが一般的でない場合は、そうでないクラスを指摘するほうがよいかもしれません。つまり、ジェネリッククラスを他のクラスから分離したい場合です。個人的には、私は実際にそれから実用的な利益を見ていないので、私は通常それをやって気にしません。

1

これまでの回答から、コンセンサスがないようです。

サブネームスペース(およびサブフォルダ)に同じファイル名を使用すると、「Generics」(System.Collecctions.Genericsなど)がオプションになります。しかし、新しい名前空間を作成することは必ずしも望ましいことではありません。

たとえば、下位互換性のために維持され、ObsoleteAttributeでマークされた非ジェネリッククラスを持つ既存のネームスペースでは、ジェネリックバージョンを同じ名前空間に保つ方が良いでしょう。

サフィックスは合理的な方法だと思います。私は接尾辞として型パラメータを使用しての条約(採択しました:。MyClassの< T>のためMyClassT、またはMyDictionary < K、V>のためのMyDictionaryKVを

36

をするだけ。 。。私は本当にこの大会のように最近、私はClassName[T].csを使用してきた

規則他の人は、一般的なクラスのファイル名に使用するものを探した後、この質問を見つけ、私はそれは次の理由で他の人よりも優れてだと思う:

  • タイプパラメータは、 マイクロソフトの慣習(たとえば、 ClassNameOfT.cs)を使用した場合よりも少し遅れて になります。
  • それはあなたがあまりにも多くの 混乱することなく、複数の 型パラメータを持つことができます:Dictionary[TKey, TValue].cs
  • それは特別なフォルダを作成する必要はありません、または特殊な名前空間で、あなたの一般的なクラスを持っています。いくつかのジェネリッククラスしかなければ、専用の特別な名前空間を持つだけでは実用的ではありません。

私は(ブーがClassName[of T]を使用しています)わずかに変更されたとはいえ、Booの一般的な構文からこの大会を借りました。

いくつかの開発者は、文字とアンダースコア以外のものを含むファイル名の恐怖症を持っているようですが、一度これを達成することができれば、このコンベンションは非常にうまくいくようです。あなたは、Visual Studio 2008を実行している場合

+35

+1私はDOS/Windowsを30年近く使っていて、一度もファイル名にカンマを使う人はいませんでした。 –

+7

@ I.J.Kennedy REALの男性は、フォルダ名にセミコロン(;)を使用し、環境変数(PATH)に入れます。 – enzi

+0

私はこのコンベンションを最初に読んだのが大好きでしたが、何らかの理由で、IFoo.csやIFoo [T] .csなど、この規約を使って名前が付けられたファイルをいくつかの拡張機能(ahem、CodeMaid)で作成しました。エクステンションを実行して非ジェネリックドキュメントをクリーンアップすると、ジェネリックドキュメントには常に影響が及ぶ...奇妙な動作。 – Dan

8

私がいることがわかりこのトピックは1年以上前に放棄されましたが、私はこの大会で私の見解を共有したいと思います。

まず、同じ名前を持つが、型パラメータの量だけが異なる複数のクラスを持つことは、必ずしも下位互換性のケースではありません。確かに、あなたはそれを頻繁に見ていませんが、.NETの新しいAction-クラスとFuncクラスはちょうどこのように設計されています。私は現在同様のものを実装しています。

  • MyClass.cs
  • MyClass.T1.cs
  • MyClass.T2:

    は明快さと識別性のために、私は特定のタイプのための一般的な引数の数を指定し、次の規則を使用します.cs

このようにして、私のファイル名は、単純な余分なドットを犠牲にしながら、クラス名とタイプパラメータの量を明確に伝えながら、短くてシンプルになります私の経験上、ファイル名では一般的に受け入れられるものであり、コンマやその他の非アルファパーマネント文字よりはるかに優れていますが、これは単なる味の問題です。型パラメータの名前(頭字語)を付けると、ファイル名が長くなりますが、このレベルでは実際に型パラメータの実際の名前には関心がありません...

+0

私はまだ注意を払っています。入力いただきありがとうございます。 :-) –

+0

+1、本当にこのような!それは単純で、短く、明確で十分で有益であり(ファイル名レベルで)、あまりにも多くの "シンボル - 恐怖人"がそこに出てはならない。しかしながら、変形として、第1のドットは、複数のドットが望ましくない場合のためのアンダースコアで置き換えることができる。私の場合と同じように、私は内部クラスに複数の点を使用します(10行以下でない限り)。たとえば、MyClass.InnerClass.cs'またはジェネリックの 'MyClass_T2.InnerClass.cs'のための例です。 (私はコード内で参照される方法を反映するので、内部クラスのためにドットを使うのが好きです。) – AnorZaken

0

私は個人的に墓のアクセントを使用しません表記:

Foo.cs 
Foo`1.cs 

私は墓のアクセントを恐れているという単純な理由から、怖い名前が付いているだけでなく、さまざまなファイルシステム、バージョン管理システム、およびURLでどのように処理されるのかよく分かりません。したがって、私は一般的な英数字に固執することを好むでしょう。

NameOfT.csは、GitHubでの検索によると、ASP.NET Core MVCで使用されているようです。 12結果。 Reference

CoreFXでも制限されています。 3結果。 Reference

例:

Foo.cs 
FooOfT.cs 
関連する問題