日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

详解C#中的命名空间

發(fā)布時(shí)間:2023/12/14 C# 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 详解C#中的命名空间 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

詳解C#中的命名空間

  • 命名空間
    • namespace
    • using
    • using static
    • 命名空間中的規(guī)則
      • 名稱范圍
      • 名稱隱藏
      • 重復(fù)的命名空間
    • 命名空間別名
    • 命名空間別名限定符

命名空間

C#中使用namespace關(guān)鍵字定義命名空間,命名空間類似我們電腦文件資源管理器中的文件夾,可自由命名且具有層級(jí),命名空間中的各個(gè)類就像文件夾中的文件,通過(guò)各種命名及劃分層級(jí)來(lái)分類存放

namespace

命名空間通過(guò)關(guān)鍵字namespace定義,使用"."或者{}包含來(lái)定義嵌套的命名空間,如下面兩段代碼在語(yǔ)義上是等價(jià)的:

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

如果類型沒有在任何命名空間中定義,則它存在于全局命名空間. 全局命名空間包含了頂層命名空間,如上例中的Outer命名空間

using

using指令用于導(dǎo)入命名空間,可以避免使用完全限定名稱來(lái)指代某種類型.以下例子導(dǎo)入了上述例子中的Outer.Middle.Inner命名空間:

using Outer.Middle.Inner;class Test{static void Main(){Class1 c1; //此處不需要一層層指定Class1的命名空間,因?yàn)橐呀?jīng)通過(guò)using引入了}}

using static

使用using static可以引用命名空間中的靜態(tài)成員,包括字段,屬性及嵌套類型.如下例中我們引用Console類的靜態(tài)成員后可直接調(diào)用WriteLine方法:

using static System.Console; WriteLine("Hello, World!");

注意using static指令只能用于類型,不能用于命名空間(將產(chǎn)生一個(gè)編譯錯(cuò)誤)

using static除了能導(dǎo)入靜態(tài)成員外還能導(dǎo)入枚舉類型:

using static System.Windows.Visibility; var textBox = new TextBox{ Visibility = Hidden}; //此處不需要指定Visibility.Hidden

命名空間中的規(guī)則

名稱范圍

外層命名空間中聲明的名稱能夠直接在內(nèi)層命名空間中使用

namespace Outer {public class OuterClass { }namespace Middle { namespace Inner{class Class1:OuterClass { }}} }

命名空間分層結(jié)構(gòu)中不同分支中的類型需要使用部分限定名稱

namespace Outer {public class OuterClass { }namespace Middle { namespace Inner{class Class1:OuterClass { }}namespace Inner2{class Class2:Inner.Class1 { } //此處不能直接使用Class1}} }

名稱隱藏

如果同一類型名稱同時(shí)出現(xiàn)在外層和內(nèi)層命名空間中,則內(nèi)層名稱優(yōu)先.如果要使用外層類型,必須使用它的完全限定名稱:

namespace Outer {public class One { }namespace Inner{class One { }class Test{One inner;// = Outer.Inner.OneOuter.One outer; // =Outer.One}} }

所有類型名稱在編譯時(shí)都會(huì)轉(zhuǎn)化為完全限定名稱.中間語(yǔ)言(IL)代碼不包含非限定名稱和部分限定名稱.

重復(fù)的命名空間

只要命名空間中的類型名稱不沖突就可以重復(fù)聲明同一個(gè)命名空間:

namespace Outer {class Class1 { } } namespace Outer {class Class2 { } }

上述示例和在Outer命名空間中同時(shí)定義Class1和Class2語(yǔ)義上是一樣的,上面兩個(gè)類也可以分別定義在兩個(gè)不同的源文件,編譯到不同的程序集中去.

命名空間別名

導(dǎo)入命名空間可能會(huì)導(dǎo)致類型名稱的沖突,這時(shí)我們可以為導(dǎo)入的類型或者命名空間創(chuàng)建別名,如下:

using Assembly2 =System.Reflection.Assembly; //給命名空間中的指定類型創(chuàng)建別名 class Program {Assembly2 asm; //= System.Reflection.Assembly } using R = System.Reflection; //給整個(gè)命名空間創(chuàng)建別名 class Program {R.Assembly asm; //= System.Reflection.Assembly }

命名空間別名限定符

之前提到,由于內(nèi)層命名空間中的名稱優(yōu)先級(jí)更高會(huì)隱藏外層命名空間中的名稱.有時(shí)即使使用類型的完全限定名稱也無(wú)法解決沖突,如下示例:

namespace N {class A{A.B b; //此處雖然使用完全限定名稱,但還是會(huì)拿到嵌套類B的實(shí)例,而不是A命名空間下的類Bclass B { }} } namespace A {class B { } }

要解決這樣的沖突,可以使用全局命名空間global來(lái)限定命名空間中的名稱:

namespace N {class A{global::A.B b; //通過(guò)global限定全局命名空間下的A命名空間中的類Bclass B { }} } namespace A {class B { } }

總結(jié)

以上是生活随笔為你收集整理的详解C#中的命名空间的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。