一、前言
MSDN關于通路修飾符的通路級别解釋:
通路修飾符是一些關鍵字,用于指定聲明的成員或類型的可通路性。本節介紹四個通路修飾符:
- public
- protected
- internal
- private
使用這些通路修飾符可指定下列五個可通路性級别:
public:通路不受限制。
protected:通路僅限于包含類或從包含類派生的類型。
Internal:通路僅限于目前程式集。
protected internal:通路限制到目前程式集或從包含派生的類型的類别。
private:通路僅限于包含類型。
二、認知誤區
internal,英文含義是“内部的”,這時候基礎不紮實的同學,可能就混淆了這個“内部的”的确切含義,到底是指“同一命名空間”的内部,還是“同一程式集”的内部,本人就是突然被問到這個問題的時候,真的就猶豫了,而且曾經一度以為就是“同一命名空間”的内部(話外:我們太多時候都自以為了,其實隻要自己稍微MSDN查一下,就很清楚了)。
第一部分已經摘抄了微軟MSDN官方的解釋,其實這個内部就是“同一程式集”的内部,也就是說,internal修飾的方法或者屬性,隻要是在同一個程式集的中的其他類都可以通路,如果二者不在同一命名空間,隻要使用using引用上相應的命名空間即可,這裡,從另外一個方面也間接看出命名空間并不是界定通路級别的,而是保證全局的類唯一性的,下面就從現實生活中解釋下internal的實際作用。
三、釋疑
都說藝術源于生活,程式設計也是一門藝術,是以一樣也是可以成生活中找到相應的場景,下面我們以實際生活場景來描述internal修飾符的作用。
某公司的某技術中心,發文規定即日起,中心内的“列印機”僅限本中心的各個部門使用,其他中心的人員不能使用。這個現實生活的場景中,技術中心其實就是個程式集,而每個部門相當于不同的類,當然部門可以有相應的标簽,相當于不同的命名空間,其實就是進行邏輯劃分,職責不同的部門屬于不同的命名空間就可以了解了。而我們的“主角”列印機的旁邊就會被貼上公告“本中心的列印機隻能本中心使用。。。。”,此時就相當于給列印機打上了internal修飾符了。其他中心的同學們,再也用不上本中心的列印機了。
下面我們用代碼來描述上面的場景:
- 我們先在一個公共的類庫中(程式集)定義一個列印機的類
namespace CommonAsset { public class Printer { private bool _isBad; /// <summary> /// 列印機是否壞了 /// </summary> public bool IsBad { get { return _isBad; } set { _isBad = value; } } public void Print() { Console.WriteLine("開始列印!"); } } }
- 然後我們在建立一個中心A(程式集),分别定義各個部門,且屬于不同的命名空間
namespace CenterA.Administration { public class DepartmentB { internal Printer PrinterB { get; set; } public DepartmentB() { PrinterB = new Printer(); } } } namespace CenterA.Technology { public class DepartmentA { internal Printer PrinterA { get; set; } public DepartmentA() { PrinterA = new Printer(); } public void PrintSomething() { if (PrinterA.IsBad) { CenterA.Administration.DepartmentB departmentB = new CenterA.Administration.DepartmentB(); departmentB.PrinterB.Print(); } else { PrinterA.Print(); } } } }
- 上面可以看見,DepartmentB和DepartmentA雖然不在同一個命名空間,但由于同屬于CenterA這個程式集,DepartmentA是可以通路DepartmentB中的
Printer 。
-
作者:小偉06
出處:https://www.cnblogs.com/liuww/p/5335003.html
本站使用「劉文偉」創作共享協定,轉載請在文章明顯位置注明作者及出處。