C#namespace vs指令

时间:2014-05-25 12:41:07

标签: c# namespaces naming

我有多年的C ++和Java经验,但我是C#的新手。

最近,当我读一本关于C#的书时,他们将以下内容称为名称空间,我发现它很奇怪。根据我在C ++中的知识,这些实际上是pre-processor directives

using System;                      //A book called these as namespace
using System.Collections.Generic;  //A book called these as namespace
using System.Text;                 //A book called these as namespace

根据msdn网站,上述内容称为directives

如果以上是致电namespace

以下情况如何?

namespace My_First_Program  //This is also call namespace
{
    class Program
    {
        static void Main()
    }
}

所以我的第一个问题是:命名空间究竟是哪个?我可以将using System;称为pre-processor directive吗?

我的第二个问题是:我可以假设namespace My_First_Program与C ++中的using namespace std类似吗?

4 个答案:

答案 0 :(得分:2)

以下语句定义命名空间:

namespace My_First_Program {
 ...
}

大括号内的任何代码都在(奇妙命名的)My_First_Program命名空间内。

using语句'导入'命名空间,以便您不必使用其完全限定名称。

使用'声明不是预处理器指令。您可以找到它们的列表here

答案 1 :(得分:2)

不,C#' using不是preprocessor directive

在C#中,这几乎与C ++相同

using System;

有类似的意图
using namespace std;

或在Java中

import java.util.*;

System命名空间中的符号现在在范围内,前提是此项目也引用了必需的程序集。如果没有using,则访问System的所有代码都需要将完整的命名空间限定为前缀,例如System.DateTime。您还可以使用using为命名空间设置别名,例如如果添加多个using语句的结果将2个或更多具有相同名称的符号带入范围,例如(using m=My.Very.Long.NameSpace

类似地:

namespace foo 
{

}

也具有与C++中相同的效果 - 这会将块中定义的所有符号放置在提供的命名空间foo中。与其他语言一样,这样做是为了防止混乱全局命名空间。这与Java文件中的package关键字非常相似。从理论上来说,C#你可以在一个文件中有多个namespace块,虽然这可能是不寻常的,也可能是不好的做法。

答案 2 :(得分:0)

使用与java中的import相同。 您的书将其称为命名空间,因为使用导入命名空间。

据我所知,使用c ++中的命名空间std与使用system的c#中的相同;

答案 3 :(得分:0)

  

命名空间到底是哪个?我对么   使用系统调用;作为预处理器指令?

不,using System;只包含命名空间,因此您可以访问System的类而不指定 namescape 。这与preprocessor directives无关C#

在这种情况下,System是命名空间,但在使用using指令包含System命名空间之前,必须添加对System.dll的引用。 DLL个文件是可以包含一个或多个名称空间的程序集。

  

我可以假设命名空间My_First_Program与在C ++中使用命名空间std类似吗?

不,namespace My_First_Program declaration of a namespace. using namespace std类似于C#

中的使用指令