2009-06-10 190 views
1

场景:利用C#中的内置命名空间使用内置命名空间

假设我想定义我自己的类。

public class Person 
{ 
} 

我希望把它放在命名空间系统中。

注:我还没有包括指令,“using System”在顶部..

namespace System 
{ 
    public class Person 
    { 
     public void Display() 
     { 
      Console.WriteLine("I am mine"); 
     } 
    } 
} 

虽然我还没有包括在顶部using System;指令,我仍然能够访问System.Console.WriteLine在我的方法,因为我声明的命名空间是System

这怎么可能?它是如何发展的?

+0

mscorlib.dll自动生成。所以,即使你不添加“使用系统”,它可以提供给你的班级。 – shahkalpesh 2009-06-10 06:32:47

回答

8

如果声明命名空间Foo.Bar.Baz,当你从该命名空间声明中引用类型在层次结构(FooFoo.BarFoo.Bar.Baz)每个命名空间中搜索:

namespace Foo.Bar.Baz 
{ 
    class Test 
    { 
     static void Main() 
     { 
      // This will search for Foo.Bar.Baz.SomeType, 
      // Foo.Bar.SomeType, Foo.SomeType, SomeType, 
      // in that order 
      SomeType.StaticMethod(); 
     } 
    } 
} 

见部分的C#3.0语言的3.8规范的血淋淋的细节。

但是,我希望你是而不是认真考虑使用这种方式来避免添加using指令。在System命名空间层次结构中创建自己的类型是一个非常糟糕的主意。

0

在命名空间内声明的任何东西都可以访问同一命名空间中的所有其他类(前提是您有包含该命名空间和这些类的程序集的引用)。

0

这是因为你已经声明你的类是属于命名空间的一部分,因此它会自动包含它的程序集。

以同样的方式,项目命名空间中的任何文件都不需要将其声明为使用该项目命名空间。

1

您不需要在同一名称空间内使用using指令。

如果你在System中声明你的类,那么“using System;”是隐含的。

但是,这可能不是你应该把你的类放在哪里。

1

由于您已在System命名空间中定义了类型,因此您可以访问在System命名空间中定义的所有其他类型。

同样,如果您在System.Data中定义了您的班级,则无需显式使用语句即可访问SystemSystem.Data

命名空间可能会跨组件复制。

注意的是,在同一个命名空间定义你的类型不授予您访问的在同一个命名空间,但不同的装配定义类型的内部成员。