2009-06-10 123 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

命名空間可能會跨組件複製。

注意的是,在同一個命名空間定義你的類型不授予您訪問的在同一個命名空間,但不同的裝配定義類型的內部成員。