奇数命名空间声明

时间:2011-07-21 23:30:52

标签: c# namespaces

所以我在工作中经历了一些较旧的代码并遇到了这个问题:

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

我以前从未见过命名空间声明使用'='。使用它有什么意义?以这种方式宣布事情有什么好处吗?

令我感到奇怪的是,他们甚至不屑于宣告Int16。视觉工作室不是通过输入来了解Int16是什么吗?

3 个答案:

答案 0 :(得分:3)

第一行让......呃...有点意义,但它不是命名空间导入;它是type alias。例如,intInt32的别名。您可以完全自由地创建自己的别名,如您在示例中所示。

例如,假设您必须导入具有相同名称的两种类型的命名空间(System.Drawing.PointSystem.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;
}