【问题标题】:What's this C# "using" directive?这个 C#“使用”指令是什么?
【发布时间】:2010-11-05 07:48:00
【问题描述】:

我在代码示例中看到了这个 C# using 语句:

using StringFormat=System.Drawing.StringFormat;

这是怎么回事?

【问题讨论】:

  • 帮助防止命名空间混淆
  • 在本例中,它“导入”StringFormat 类名,但不包含 System.Drawing 命名空间的其余成员。

标签: c# using using-directives


【解决方案1】:

using 关键字用于导入命名空间或别名类或用于管理一次性对象的范围。这里我们说的是命名空间的使用。

using StringFormat=System.Drawing.StringFormat;

这里使用的 using 方式在 C# 中有点不寻常,但在 Java 导入语句中更常见。它所做的是提供一个 StringFormat 别名,而无需导入整个 System.Drawing 命名空间。一些具有 Java 背景的人喜欢只导入正在使用的类而不是整个 anmespace(也称为 Java 包)。可以说,如果您只导入特定的类名,您可以主动避免潜在的名称冲突,但这在 C# 中并不常见,而且 Visual Studio 也不鼓励这样做,例如 Netbeans 为 Java 所做的。

别名的更常见用法是在发生命名冲突时将类名解析为缩短的别名。

using System.Drawing;
using AwesomeCompany.ReallyAwesomeStuff.AwesomeLibrary.Drawing;
/* AwesomeCompany.ReallyAwesomeStuff.AwesomeLibrary.Drawing has a StringFormat class */
using AwesomeStringFormat = AwesomeCompany.ReallyAwesomeStuff.AwesomeLibrary.Drawing.Stringformat;
using StringFormat = System.Drawing.StringFormat;

public class AwesomeForm() : Form
{
    private AwesomeForm()
    {
        AwesomeStringFormat stringFormat = new AwesomeStringFormat();
        stringFormat.Color = Color.Red;
        /* etc */
    }
}

【讨论】:

    【解决方案2】:

    也许在另一个命名空间(如 Acme.Stuff)中声明了一个不同的、不相关的 StringFormat。如果是这样的话,这会引起混乱:

    using System.Drawing; // Contains StringFormat type.
    using Acme.Stuff;  // Contains another StringFormat type.
    
    private void Foo()
    {
        StringFormat myFormat = new StringFormat(); // which one to use?
    }
    

    StringFormat=System.Drawing.StringFormat 上的using 别名可以消除一些的困惑。

    【讨论】:

      【解决方案3】:

      这是将类型名别名为更短的名称。相同的语法也可用于命名空间的别名。见using directive

      (根据 Richard 更新)

      【讨论】:

      • 命名空间/或/准确地说是类型别名。
      • 这是一种普遍接受的方式来命名您自己的泛型吗?例如使用 DestinationMap = System.Collections.Generic.Dictionary;
      • @noselasd :不,这不是常见的做法。当然,如果你愿意,你可以这样做,但我强烈建议不要这样做,因为它非常令人困惑......最好创建一个继承自 Dictionary 的 DestinationMap 类
      【解决方案4】:

      它是一个别名,从现在开始,用户可以使用StringFormat来引用System.Drawing.StringFormat。如果您不想使用整个命名空间(例如在名称冲突问题的情况下),它会很有用。

      来源:using Directive article from MSDN

      【讨论】:

      • 我想说使用相同的名称没有意义,但由于您提到它将避免包含整个命名空间,所以它确实有意义。没有这一点,剩下的答案就不完整了。
      【解决方案5】:

      这将为 System.Drawing.StringFormat 定义一个别名。

      这和这个例子是一样的:

      using SQL = System.Data.SqlServer;
      
      SQL.SqlConnection sql = new SQL.SqlConnection();
      

      【讨论】:

        【解决方案6】:

        这是命名空间的别名

        【讨论】:

          【解决方案7】:

          这意味着您使用 StringFormat 作为 System.Drawing.StringFormat 的别名;

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-10-31
            • 2021-05-18
            • 2019-11-30
            • 1970-01-01
            • 2017-05-04
            相关资源
            最近更新 更多