第6章 型別的可見性

2021-09-02 05:38:47 字數 1080 閱讀 9939

在檔案範圍內定義型別時,可以將型別的可見性定義為public和internal.public不僅對他自己定義的程式集可見,還對其他的程式集是可見的。internal是只對本程式集中的**可見。

友元程式集

假定某公司的團隊a在某個程式集中定義了一組工具型別,而團隊b想要使用這個型別。但是由於某些原因,不能將這兩個程式集生成到同乙個程式集中。為了讓團隊b使用團隊a的這個型別,可以將團隊a的這個型別用public修飾。但是這肯定不是這家公司所希望的。這時可以將團隊a的這個型別用internal來修飾。clr和c#通過友元程式集來提供這方面的支援。

internal class demo

}

在assemblyinfo.cs中定義如下**。

[assembly:internalsvisibleto("demo")]
也就是說,這個demo型別對demo這個型別是可見的。也就說所謂的友元。

注意:c#編譯器在編譯友元程式集是,要求編譯器開關/out:。因為編譯器需要知道程式集的名稱。

注意:「友元程式集」功能只適合發布時間相同的程式集,最好是打包到一起發布,這是因為友元程式集的相互依賴性很高,所以如果錯開時間太久發布,就有可能造成相容性問題,如果程式集必須在不同的時間發布,應嘗試設計public類,使他能由任何程式集訪問,但是通過乙個linkdemand來請求strongnameidentitypermission,從而限制對他的訪問。(這個功能在.net 4.0之後不在支援)

派生類中重寫在它的基類中定義的乙個成員時,c#編譯器要求原始版本和重寫版本的可訪問性一致,也就是說,如果基類中成員的可訪問性是protected,那麼在派生類中重寫這個成員時,它的訪問性也必須是protected,但是這只是c#要求的,其實clr允許放寬成員的可訪問性限制,但不允許收緊,也就是說,派生類中重寫基類中的protected成員時,它的可訪問性可以是protected和public。這是因為,clr承諾派生類可以轉型為基類,並獲取對基類方法的訪問權。(也就是說派生類重寫基類成員,然後派生類向上轉型之後,能訪問基類的成員(雖然此時這個向上轉型的物件實質上還是派生類))

繼承的可見性

繼承的可見性 在c 中通過繼承,子類將擁有除父類的 建構函式和析構函式以外的所有的成員.注意這裡的 擁有 和 可見性 是兩個概念.擁有某個成員是指該成員確確實實地存在於該類中,但如果該成員的訪問許可權不允許該成員在繼承的子類中可見 比如private,internal 我們將不能在子類中對他們進行操...

邊的可見性

在 opengl 裡面,邊是具有可見性的,即我們可以讓一條邊顯示或不顯示在螢幕上,有時候我們必須讓一些邊隱藏起來,就像前面說過的利用繪製凸多邊形來繪製凹多邊形的時候就需要隱藏掉一些邊。邊的可見性是利用 gledgeflag 函式來說明的,該函式有乙個引數,且只為 true 或 false 分別表示可...

成員函式的可見性

良好的程式設計應該盡可能減小類與類之間耦合,所遵循的經驗法則是 盡量限制成員函式的可見性。如果成員函式沒必要公有 public 就定義為保護 protected 沒必要保護 protected 就定義為私有 private 可見性 說明 正確用法 public 公有成員函式可被任何其它物件和類的成員...