2009-04-29 66 views
38

我希望能夠區分類的通用和常規(非通用)版本。很像.NET框架對它的幾個接口和集合類的通用和非通用版本。 (QueueQueue(T)通用類的文件名約定

我通常喜歡遵循每個文件一個類的約定(如在Java中)。命名包含單個泛型類的文件是否有一個通用約定?我主要對Windows感興趣(特別是NTFS),但它似乎是一個很好的約定(至少是一點)便攜式。

+0

可不可以給一個類的實例,這兩個特定的和泛型類型具有相同名稱(這可能不是一起開始奇妙的想法?)的.NET非泛型類型僅用於向後兼容。 – 2009-04-29 20:12:38

+2

「你能舉一個既具有相同名稱的特定類型又具有泛型類型的例子」 - 你自己提供了一個答案:一個需要向後兼容性的類庫! – Joe 2009-04-29 20:16:21

回答

29

在微軟,他們使用ClassNameOfT.cs

+0

像這樣,很清楚。儘管我可能仍然將類命名爲非通用版本。 – 2009-04-29 20:31:52

1

如何:

Type.cs 

TypeGeneric.cs 

每當我在過去我總是把兩種類型在一個文件中與非泛型類型作爲文件名已經做到了這一點。我認爲這讓事情變得非常清楚,因爲.NET沒有像Java那樣每個文件都有一種類型的約定/限制。

但是如果你必須那麼我會建議像我上面,並使用後綴會使文件的任何字母順序列出(Solution Explorer中,Windows資源管理器等)一起顯示出來。

這裏是另一個想法:

Type`1.cs 

這將允許你通過他們接受泛型類型參數的數量打破了不同的泛型類型。它只是一個想法,但我仍然認爲將所有類型放在一個文件中會更簡單。

0

我可能在項目中有兩個文件夾,像Gereric,NonGeneric或類似的東西。它們仍然可以位於相同的名稱空間中,然後它們可以具有相同的文件名。只是一個想法...

+5

我個人試圖避免在不同文件夾中的相同名稱空間中的類。爲了明天的開發人員的利益,我喜歡文件夾層次結構以匹配名稱空間層次結構。 – Joe 2009-04-29 20:26:53

+0

夠公平的。無論如何,我可能會將它們放在單獨的namesapce中。就像MyProj。和MyProj.Generic。 – BFree 2009-04-29 20:33:47

0

所有新的Microsoft類使用泛型。在泛型出現之前,QueueArrayList就在那裏。泛型是前進的方向。

一類的每一個文件的約定是命名類名後的文件名(是否通用的不是)。對於MyClass,您將擁有MyClas.cs。對於每個新的命名空間,您都需要創建一個新文件夾。這也是Visual Studio的工作原理。

1

我可能會把它們放在文件夾中,而不是使用名稱空間機制。你可以比較System.Collections與System.Collections.Generic。另一方面,如果類比泛型更常見,也許最好指出那些不是泛型。那就是如果你真的想把泛型類從其他類中分離出來。就我個人而言,我通常不會那麼做,因爲我從中看不到實際的好處。

1

從迄今爲止的回覆看來,似乎沒有達成共識。

在子名稱空間(和子文件夾)中使用相同的文件名「泛型」(如System.Collecctions.Generics)是一個選項。但是創建新的名稱空間並不總是可取的。

例如,在爲保持向後兼容性而標記有ObsoleteAttribute的非泛型類的現有命名空間中,最好將通用版本保留在相同的命名空間中。

我認爲後綴是一種合理的方式。我已經通過使用類型參數作爲後綴(這樣的約定:MyClassT爲MyClass的< T>,或MyDictionaryKV爲MyDictionary < K,V>

36

剛。發現這個問題找其他人用什麼約定泛型類的文件名後

最近我一直在使用ClassName[T].cs我真的很喜歡這個慣例,而且我認爲這是優於其他的原因如下:。

  • 類型參數你跳出 多一點比他們做的 微軟慣例(例如, ClassNameOfT.cs)。
  • 它可以讓你有多個 類型參數沒有太多 困惑:Dictionary[TKey, TValue].cs
  • 它不要求你創建任何特殊的文件夾,或者在一個特殊的命名空間中的泛型類。如果你只有幾個泛型類,那麼只有一個專用的名稱空間是不實際的。

我借這個慣例從Boo的通用語法,雖然略作修改(噓使用ClassName[of T])。

一些開發者似乎有一個包含字母和下劃線的文件名的恐懼症,但一旦你可以認爲這個慣例似乎工作得非常好。

8

我看到這個話題在一年多以前就已經放棄了,但我仍然想分享一下我對這個公約的看法。

首先,具有多個具有相同名稱但類型參數數量不同的類並不總是向後兼容的情況。當然,你不會經常看到它,但是.NET的新Action和Func類只是這樣設計的,而且我目前正在實現類似的東西。

爲了清晰和可區分,我用下面的慣例,只有指定給定類型的泛型參數的個數:

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

這樣,我的文件名保持簡短而且簡單,同時仍然以簡單的額外點代價清楚地傳達類名稱和不同數量的類型參數(根據我的經驗,這是一種普遍接受的做法,並且看起來比逗號和其他非英文字母數字字符要好得多,但這只是我猜測的一個口味問題)。把類型參數的名稱(或首字母縮略詞)只是延長文件名,而在這個級別上,我並不真正對類型參數的實際名稱感興趣...

0

我個人不會使用重音符符號:

Foo.cs 
Foo`1.cs 

由於簡單的原因,我害怕的嚴重口音。它不僅有一個可怕的名字,但我不確定它將如何處理不同的文件系統,版本控制系統和URL。因此,我寧願堅持常見的字母數字字符。

NameOfT.cs根據在GitHub上的搜索似乎在ASP.NET Core MVC中使用。 12結果。 Reference

在CoreFX中的使用也有限。 3結果。 Reference

例子:

Foo.cs 
FooOfT.cs