这个 C#“using”指令是什么?

What's this C# "using" directive?

提问人:Ronnie Overby 提问时间:6/24/2009 最后编辑:Luke GirvinRonnie Overby 更新时间:9/17/2019 访问量:10913

问:

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

using StringFormat=System.Drawing.StringFormat;

这到底是怎么回事?

使用 using 指令 C#

评论

1赞 Josh Stodola 6/24/2009
为了帮助防止命名空间混淆
1赞 Brian Reiter 6/24/2009
在此示例中,它“导入”StringFormat 类名,而不导入 System.Drawing 命名空间的其余成员。

答:

33赞 Sean 6/24/2009 #1

这是将类型名称别名为较短的名称。相同的语法也可用于别名命名空间。请参阅 using 指令

(更新以回应理查德)

评论

0赞 Richard Anthony Hein 6/24/2009
命名空间 /or/ 准确地说,键入别名。
0赞 nos 6/24/2009
这是命名自己的泛型的普遍接受的方式吗?例如,使用 DestinationMap = System.Collections.Generic.Dictionary<string,Destination>;
0赞 Thomas Levesque 6/24/2009
@noselasd : 不,这不是常见的做法。当然,如果你愿意,你可以这样做,但我强烈建议不要这样做,因为它非常令人困惑......最好创建一个继承自 Dictionary<string, Destination 的 DestinationMap 类>
3赞 Fiur 6/24/2009 #2

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

13赞 mbillard 6/24/2009 #3

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

来源:使用 MSDN 中的指令文章

评论

1赞 Richard Anthony Hein 6/24/2009
我本来想说使用相同的名称没有意义,但既然你提到它会避免包含整个命名空间,它确实是有道理的。没有这一点,其余的答案都是不完整的。
2赞 Fossmo 6/24/2009 #4

它是命名空间的别名

3赞 Zanoni 6/24/2009 #5

这将定义 System.Drawing.StringFormat 的别名。

这与以下示例相同:

using SQL = System.Data.SqlServer;

SQL.SqlConnection sql = new SQL.SqlConnection();
7赞 Bullines 6/24/2009 #6

也许在另一个命名空间(如 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 上的使用消除了一些混淆。

1赞 Brian Reiter 6/24/2009 #7

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

using StringFormat=System.Drawing.StringFormat;

这里的使用方式在 C# 中有点不寻常,但在 Java import 语句中更常见。它的作用是提供 StringFormat 别名,而不导入整个 System.Drawing 命名空间。一些有 Java 背景的人喜欢主动只导入正在使用的类,而不是整个 anmespaces(又名 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 */
    }
}