【问题标题】:C# namespace vs directivesC# 命名空间与指令
【发布时间】:2014-05-25 12:41:07
【问题描述】:

我在 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 吗?

【问题讨论】:

  • 我想你需要看看 using as 和 import in java 一样。
  • @StijnBernards 我是这么想的,但后来我被这本书将其称为namespace 的方式弄糊涂了。
  • 他们称之为命名空间,因为 using 实际上使用了命名空间。
  • namespace My_First_Program{} 是命名空间定义,using System; 导入命名空间。

标签: c# namespaces naming


【解决方案1】:

以下语句定义了命名空间:

namespace My_First_Program {
 ...
}

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

using 语句“导入”命名空间,因此您不必使用它们的完全限定名称。

'using' 语句不是预处理器指令。你可以找到他们的名单here

【讨论】:

    【解决方案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 块,尽管这样做是不寻常的并且可能是不好的做法。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        我可以假设命名空间 My_First_Program 的工作方式类似于在 C++ 中使用命名空间 std 吗?

        不,namespace My_First_Programdeclaration of a namespace. using namespace std 类似于 using 指令 in C#

        【讨论】:

          猜你喜欢
          • 2011-01-02
          • 2010-12-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-09
          • 1970-01-01
          • 2016-05-24
          • 2011-07-01
          相关资源
          最近更新 更多