所以我在工作中经历了一些较旧的代码并遇到了这个问题:
using Int16 = System.Int16;
using SqlCommand = System.Data.SqlClient.SqlCommand;
我以前从未见过命名空间声明使用'='。使用它有什么意义?以这种方式宣布事情有什么好处吗?
令我感到奇怪的是,他们甚至不屑于宣告Int16。视觉工作室不是通过输入来了解Int16是什么吗?
答案 0 :(得分:3)
第一行让......呃...有点意义,但它不是命名空间导入;它是type alias。例如,int
是Int32
的别名。您可以完全自由地创建自己的别名,如您在示例中所示。
例如,假设您必须导入具有相同名称的两种类型的命名空间(System.Drawing.Point
和System.Windows.Point
会想到...)。您可以创建一个别名,以避免完全限定代码中的两种类型。
using WinFormsPoint = System.Drawing.Point;
using WpfPoint = System.Windows.Point;
void ILikeMyPointsStructy( WinFormsPoint p ) { /* ... */ }
void IPreferReferenceTypesThankYou( WpfPoint p ) { /* ... */ }
答案 1 :(得分: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";
}
}
然后你决定在代码文件中使用它们 - 只需写下来就会得到一个编译错误:
var foo = Constants.FIRST;
另一种方法是完全限定常量,这可能很麻烦,因此命名空间别名简化了它:
using Constants = Library.Constants;
using ServiceConstants = Service.Constants;
话虽如此,我不知道为什么你把Int16作为Int16的别名!
答案 2 :(得分:1)
对于那些来自C ++背景的开发人员,该构造也可以用作一种“本地typedef”,它有助于简化通用容器定义: -
using Index = Dictionary<string, MyType>;
private Index BuildIndex(. . .)
{
var index = new Index();
. . .
return index;
}