C# 命名空間

2020-09-08 17:21 更新

C#命名空間

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

命名空間的好處是:

  1. 避免名字沖突。
  2. 便于查找類(lèi)型名字。

如:?System.secruity.Cryptogtaphy?

下面介紹namespace 關(guān)鍵字的使用。

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

例如:

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

命名空間中的點(diǎn)表示嵌套命名空間的層次結(jié)構(gòu)。

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

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

我們可以引用一個(gè)具有完全限定名的類(lèi)型。

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

在任何命名空間中未定義的類(lèi)型都在全局命名空間中。


using指令

using 指令導(dǎo)入一個(gè)命名空間,允許您引用沒(méi)有完全限定名稱(chēng)的類(lèi)型。

以下導(dǎo)入上一個(gè)示例的 Outer.Middle.Inner 命名空間:


using Outer.Middle.Inner; 

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

名稱(chēng)作用域

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

在此示例中,名稱(chēng) Middle 和 Class1 被隱式導(dǎo)入 Inner:


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

要引用命名空間層次結(jié)構(gòu)的不同分支中的類(lèi)型,請(qǐng)使用部分限定名稱(chēng)。

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


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

名稱(chēng)隱藏

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

要引用外部命名空間中的類(lèi)型,必須限定其名稱(chēng)。

例如:


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

重復(fù)命名空間

您可以重復(fù)命名空間聲明,只要命名空間中的類(lèi)型名稱(chēng)不沖突:


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

嵌套使用指令

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

在以下示例中,Class1 在一個(gè)作用域中可見(jiàn),但在另一個(gè)作用域中不可見(jiàn):


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

別名類(lèi)型和命名空間

導(dǎo)入命名空間可能導(dǎo)致類(lèi)型名沖突。

我們可以只導(dǎo)入你需要的特定類(lèi)型,給每個(gè)類(lèi)型一個(gè)別名。

例如:


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

整個(gè)命名空間可以進(jìn)行別名,如下所示:


using R = System.Reflection; 

class Program { 
   R.PropertyInfo p; 
} 


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)