C# 命名空間

2020-09-08 17:21 更新

C#命名空間

命名空間是一個域,這在個域中所有的類型名字必須是唯一的,不同的類型分組歸入到層次化的命名空間,

命名空間的好處是:

  1. 避免名字沖突。
  2. 便于查找類型名字。

如:?System.secruity.Cryptogtaphy?

下面介紹namespace 關鍵字的使用。

namespace test
{
  class class0
  {
    int i;
    public class0()
    {
    }
  }
}

例如:

namespace Outer.Middle.Inner { 
    class Class1 {} 
    class Class2 {} 
} 

命名空間中的點表示嵌套命名空間的層次結(jié)構。

下面的代碼在語義上與前面的示例相同:

namespace Outer { 
    namespace Middle {
        namespace Inner { 
            class Class1 {} 
            class Class2 {} 
        } 
    } 
} 

我們可以引用一個具有完全限定名的類型。

例如,我們可以參考前面示例中的 Class1 作為 Outer.Middle.Inner.Class1。

在任何命名空間中未定義的類型都在全局命名空間中。


using指令

using 指令導入一個命名空間,允許您引用沒有完全限定名稱的類型。

以下導入上一個示例的 Outer.Middle.Inner 命名空間:


using Outer.Middle.Inner; 

class Test { 
    static void Main() { 
        Class1 c; // Don"t need fully qualified name
    } 
} 

名稱作用域

在外部命名空間中聲明的名稱可以在內(nèi)部命名空間內(nèi)使用不合格。

在此示例中,名稱 Middle 和 Class1 被隱式導入 Inner:


namespace Outer { 
    namespace Middle {
        class Class1 {}
        namespace Inner { 
            class Class2 : Class1 {} 
        } 
    } 
} 

要引用命名空間層次結(jié)構的不同分支中的類型,請使用部分限定名稱。

在下面的示例中,我們基于 Common.MyBase MyClass


namespace Outer { 
    namespace Common {
        class MyBase {} 
    } 
    namespace MyNamespace {
        class MyClass : Common.MyBase {} 
    } 
} 

名稱隱藏

如果同一類型名稱出現(xiàn)在內(nèi)部和外部命名空間中,則內(nèi)部名稱將勝出。

要引用外部命名空間中的類型,必須限定其名稱。

例如:


namespace Outer { 
    class myMethod { } 
    namespace Inner { 
        class myMethod { } 
        class Test { 
            myMethod f1; // = Outer.Inner.myMethod 
            Outer.myMethod f2; // = Outer.myMethod 
        } 
    } 
} 

重復命名空間

您可以重復命名空間聲明,只要命名空間中的類型名稱不沖突:


namespace Outer.Middle.Inner {
     class Class1 {} 
} 
namespace Outer.Middle.Inner { 
    class Class2 {} 
} 

嵌套使用指令

我們可以在命名空間中嵌套一個 using 指令。

在以下示例中,Class1 在一個作用域中可見,但在另一個作用域中不可見:


namespace Outer { 
    class Class1 {} 
} 
namespace N2 { 
    using Outer;
    class Class2 : Class1 {} 
} 
namespace N2 { 
    class Class3 : Class1 {} // Compile-time error 
} 

別名類型和命名空間

導入命名空間可能導致類型名沖突。

我們可以只導入你需要的特定類型,給每個類型一個別名。

例如:


using PropertyInfo2 = System.Reflection.PropertyInfo; 
class Program { PropertyInfo2 p; } 

整個命名空間可以進行別名,如下所示:


using R = System.Reflection; 

class Program { 
   R.PropertyInfo p; 
} 


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號