5

初学者关于 C# 的问题。

在每个程序中,我必须包含几个命名空间,例如:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

为什么我必须包括:

using System.Collections.Generic;
using System.Linq;
using System.Text;

...因为它们包含在第一个中:

using System;

先感谢您!

4

8 回答 8

8

因为嵌套命名空间不包含在父命名空间中。有关详细信息,请参阅使用指令文档

using指令不允许您访问嵌套在您指定的命名空间中的任何命名空间。

于 2012-11-27T11:43:53.550 回答
2

SystemSystem.IO命名空间是不同的。

您可以将“子命名空间”视为对象模型中的父子关系。如果您可以访问“汽车”对象并不意味着您可以访问汽车的车轮。

System是一个巨大的命名空间,包含数百个嵌套的命名空间和数千个类。您应该分别指定所有嵌套的命名空间,以说明您对模块的哪一部分感兴趣。

于 2012-11-27T11:44:47.920 回答
2

System并且System.Text是两个不同的命名空间。这System.Text似乎System是我们作为程序员投入其中的语义的一部分。从平台视图来看,没有嵌套命名空间之类的东西。

但即使不是这样,如果你有

namespace MySystem{
   namespace Foo{
       class Bar {...}
   }

   class Bar{...}
}

using MySystem;
class MyClass{
    private Bar _myBar; //Which one is it MySystem.Foo.Bar or MySystem.Bar?     
}
于 2012-11-27T11:45:12.737 回答
2

想象这些命名空间与这些类(姓氏是一个类):

  • A.B.Class1
  • A.Class2

现在您有以下内容:

using A - 允许您直接引用 Class2……但不能引用 Class1。

using A.B- 允许您直接引用 Class1 而不是 Class2。

如果你想在你的代码中直接引用这两个类,你需要两个 using。

于 2012-11-27T11:47:52.240 回答
0

由于您是初学者,让我澄清一下namespaceC# 和packageJava 中的一件事是不同的。无需合并它们。

于 2012-11-27T11:44:23.023 回答
0

并非 .net 中的所有类都在一个大容器中。这样做会增加类名冲突的机会,并且一开始看起来并不好。命名空间是试图保持库清洁并更有意义的容器。拥有一个FTP 类和 String 类放在一个容器下在逻辑上没有任何意义。它们做两种不同的事情,它们应该放在不同的容器中。

命名空间也可以嵌套。有时命名空间可以只有另一个命名空间,没有任何类。所以要访问一个类,您需要先限定完整的命名空间,然后才能使用它。

在您的情况下,您使用不同的类,它们位于不同的容器上。因此,如果您需要它们,则需要使用它们的命名空间来限定它们。

于 2012-11-27T11:52:52.863 回答
0

只是一个附加的例子,让你清楚地理解。

不能通过调用父命名空间来访问子命名空间

Namespace Main  //only code and classes are accessible
{
  //code for Main Namespace
  Namespace subMain     //only code and classes are accessible
  {
     //code for subMain
     Namespace verySubMain  //only code and classes are accessible
     {
        //code for verySubMain
     }
     Namespace otherVerySubMain  //only code and classes are accessible
     {
        //code for otherVerySubMain
     }
  }
}
于 2012-11-27T11:53:11.117 回答
-1

如果您想在不使用 using 语句的情况下访问 System.Text 中的类,则每次您希望使用它时都必须输入 Text."Name of class/function"。

这样你就可以调用“类/函数的名称”。

不确定您是否是初学者,但这是我能描述的最简单的方式。

于 2012-11-27T11:52:17.097 回答