2011-07-21 172 views
1

所以我要通過在工作中的一些舊的代碼和跨越這來了:奇數命名空間聲明

using Int16 = System.Int16; 
using SqlCommand = System.Data.SqlClient.SqlCommand; 

我從來沒有見過一個命名空間聲明之前使用「=」。使用它有什麼意義?以這種方式宣佈事情有什麼好處嗎?

還有什麼讓我覺得奇怪的是,他們甚至不屑於聲明Int16。視覺工作室不知道什麼是Int16只需輸入它?

回答

3

第一行使...... erm ......意義不大,但它不是一個名稱空間導入;它是一個type alias。例如,intInt32的別名。您可以完全自由地創建自己的別名,如您在示例中所示。

例如,假設您必須導入具有相同名稱的兩種類型的命名空間(System.Drawing.PointSystem.Windows.Point纔會想到...)。您可以創建別名以避免在代碼中完全限定這兩種類型。您如何訪問某些types--尤其是當你有很多類型的衝突的名字

using WinFormsPoint = System.Drawing.Point; 
using WpfPoint = System.Windows.Point; 

void ILikeMyPointsStructy(WinFormsPoint p) { /* ... */ } 
void IPreferReferenceTypesThankYou(WpfPoint p) { /* ... */ } 
2

的命名空間別名有利於簡化。

例如,如果您引用了幾個你已經定義的不同集的常量的喜歡不同的命名空間:

namespace Library 
{ 
    public static class Constants 
    { 
     public const string FIRST = "first"; 
     public const string SECOND = "second"; 
    } 
} 

namespace Services 
{ 
    public static class Constants 
    { 
     public const string THIRD = "third"; 
     public const string FOURTH = "fourth"; 
    } 
} 

然後你決定在代碼中使用這兩種file--你會得到一個編譯錯誤只是寫:

var foo = Constants.FIRST; 

另一種方法是完全符合您的常量,它可以是一個痛苦,所以命名空間別名簡化它:

using Constants = Library.Constants; 
using ServiceConstants = Service.Constants; 

話雖如此,我不知道爲什麼你會將Int16作爲Int16的別名!

+0

的Int16的位令我感到困惑了。在那個代碼文件中有更多像它! – CountMurphy

1

對於從C++背景的構建與開發者也可以用來作爲一種「本地的typedef」的,這有助於簡化通用容器定義: -

using Index = Dictionary<string, MyType>; 

private Index BuildIndex(. . .) 
{ 
    var index = new Index(); 
    . . . 
    return index; 
}