2013-10-25 51 views
3

在c#中,如果我想添加其他系统命名空间,为什么我需要调用每个命名空间?如果我想添加其他系统名称空间,为什么我需要调用每个名称空间?

例如,如果我想打电话给System.Text命名空间我必须使用 :

using System; 
using System.Text; 
  • 为什么不能我只是用用系统?
  • 为什么我还必须使用System.Text调用?
  • 为什么不能通过使用System来使用所有的System namespaces?
  • 为什么我们使用系统所有的命名空间?和什么含义系统的?

回答

0

因为它们是不同的名称空间。

+0

不是一个答案,因为系统是一个集合,充满了例如“文本”,为什么不是在库中的编译器库系统? – Max

+0

正在不同的程序集中回答吗? –

+0

@MaxMommersteeg不,'System'不是一个集合,例如'.Text'。请参阅我的回答澄清。 –

3

实际上,你只需要

using System.Text; 

如果只想使用System.Text命名空间。

System命名空间内有各种类型,例如System.DateTimeSystem.Text虽然不在System中,但它是一个单独的名称空间。

这种混淆是由于在名称空间的每个“级别”都有类型造成的。这意味着例如System.DateTimeSystem.Text都出现在System中,实际上前者是System中的一种,而后者是完全不同的名称空间。

+1

你能详细说明为什么命名约定不好吗?也许这只是因为我已经使用.NET多年了,但它对我来说很有意义,而且我们在自己的应用程序中使用了相同的命名传递。 –

+0

@LarsKristensen,我试图做到这一点。希望我在这个过程中没有让我的答案过于复杂! –

+0

那么,理解你想表达的东西有点棘手 - 编辑实际上使得它听起来像你认为使用命名对话是一个好方法? :) –

3

System命名空间仅引用在System下直接找到的文件。它不会自动包含所有System。*名称空间。这是有意的,因为这些都是专业的命名空间,在每个班级都不需要。例如,并非每个项目都自动需要System.Web命名空间。

0

This article解释了如何使用命名空间。尤其是关于完全限定名称的例子可能会对你很有意思。

1

下面是一个视觉示例,可以帮助你一点。

基本上,您无法从命名空间.System访问命名空间.Text,因为.Text命名空间中包含的方法不存在于.System命名空间中。

namespace OuterNamespace 
{ 
    public class DoStuff 
    { 
     public DoStuff() 
     { 
      //This DoStuff is different... 
     } 
    } 
    namespace InnerNamespace 
    { 
     public class DoStuff 
     { 
      public DoStuff() 
      { 
       //than this DoStuff. 
      } 
     } 
    } 
} 

public class Test 
{ 
    public Test() 
    { 
     //This "DoStuff" class 
     OuterNamespace.DoStuff outerStuff = new OuterNamespace.DoStuff(); 

     //Is different than this "DoStuff" class 
     OuterNamespace.InnerNamespace.DoStuff innerStuff = new OuterNamespace.InnerNamespace.DoStuff(); 
    } 
} 
0

系统和System.Text是两个不同的命名空间,这就是为什么你必须既指。

System命名空间包含基本类和基础类定义常用值和引用数据类型,事件和事件处理程序,接口,属性和处理异常

System.Text命名空间中包含有类型为字符编码和串操纵。子名称空间使您能够使用正则表达式处理文本。

现在,如果您对命名风格感到困惑,那么我会坚持使用微软的命名约定,因为它明确隔离了相关类型并且易于迭代。这使得在一个System命名空间内列出所有CLR类型的迭代类型迭代成为可能。

More about namespaces

相关问题