在C#中定義namespace or type aliases是否有任何已建立的命名或編碼約定?C#中的類型/命名空間別名約定
對於那些不知道的人,C#語言有一個特性,可以在名稱空間和類型的文件中定義別名。當與第三方庫命名衝突以及縮短代碼中的類型名稱時,這會很有用。下面是它看起來像的一個例子。
using Forms = System.Windows.Forms;
大多數的,我已經在網絡上看到的例子傾向於使用未縮寫的大寫名稱作爲別名,如別名形式在上面的例子。在某些地方,包括official MSDN page,其中解釋了示例,其別名爲colAlias命名空間System.Collections。爲了使它更復雜,可能會有一些人根據是否定義了名稱空間別名或類型別名來選擇不同的準則。
爲了給我一些背景知道爲什麼我感興趣的任何指南與別名我會解釋我在做什麼。在最近的一個項目中,我開始簡化一個模式,其中有幾個類繼承自通用基類,它通過使用類型別名接受複雜類型參數。
因此,使用這種技術,下面的複雜例子變得更可讀,一旦類型別名被應用。
public class MyClass: MyGenericBaseClass<TripleLindyFancyAlgorithm<List<SomeValueType>>, List<SomeValueType>>
{
public override List<SomeValueType> DoSomething(TripleLindyFancyAlgorithm<List<SomeValueType>> operation)
{
// ...
}
}
而且在使用類型別名的must cleaner版本下面。
using Result = List<SomeValueType>;
using Algorithm = TripleLindyFancyAlgorithm<List<SomeValueType>>; // Note: cannot reference an alias within an alias definition!
public class MyClass: MyGenericBaseClass<Algorithm, Result>
{
public override Result DoSomething(Algorithm operation)
{
// ...
}
}
雖然這看起來更簡單,人們很容易忘記,一個別名,如結果實際上只是一個別名列表,並沒有所謂的結果實際類型。爲了從視覺上分離這些概念,我正在考慮遵循一些類似於在私有成員之前使用下劃線'_'的前綴約定,以幫助將類型別名與實際類型區分開來。在我這樣做之前,我想確保我沒有重新發明輪子,因爲可能已經有更多已經建立的公約。
偉大的這是真正的討論公約的第一篇文章,這是我最初提出的通過提出這個問題所做的。 – jpierson 2011-12-12 17:52:09
獲得賞金。感謝您解決被問到的問題(即不僅僅是陳述您自己的偏好),並以真實世界的經驗爲其提供支持。 – 2011-12-15 10:15:37
@MthethewStrawbridge - 謝謝你。正如你所說,其他答案似乎並沒有解決這個問題,而是說明了個人喜好。答案中的不一致還表明,關於命名空間別名的約定確實沒有達成共識... – Oded 2011-12-15 10:17:56