C#中「內部」關鍵字的實際用法

您可否解釋一下C#中internal關鍵字的實際用法? 框架

我知道internal修飾符會限制對當前程序集的訪問,可是我應該在什麼時候何地使用它? 單元測試


#1樓

當您的類或方法不徹底適合面向對象的範式時,它們會執行危險的事情,須要從您控制下的其餘類和方法中調用它們,而且您不想讓其餘任何人使用。 測試

public class DangerousClass {
    public void SafeMethod() { }
    internal void UpdateGlobalStateInSomeBizarreWay() { }
}

#2樓

您但願從同一程序集中的許多其餘類訪問的實用程序或幫助程序類/方法,可是要確保其餘程序集中的代碼沒法訪問。 spa

MSDN (經過archive.org): code

內部訪問的常見用法是在基於組件的開發中,由於它使一組組件可以以私有方式進行協做,而不會暴露給其他的應用程序代碼。 例如,用於構建圖形用戶界面的框架能夠提供Control和Form類,這些類可使用具備內部訪問權限的成員進行協做。 因爲這些成員是內部成員,所以它們不會暴露給使用框架的代碼。 orm

您還能夠將internal修飾符與InternalsVisibleTo程序集級別屬性一塊兒使用,以建立「朋友」程序集,這些程序集被授予對目標程序集內部類的特殊訪問權限。 對象

這對於建立單元測試程序集頗有用,而後容許其調用要測試的程序集的內部成員。 固然,沒有其餘程序集被授予此訪問級別,所以,在釋放系統時,將維護封裝。 接口


#3樓

當您具備須要在當前程序集範圍內且永遠不在其以外訪問的方法,類等時。 開發

例如,DAL可能具備ORM,但不該將對象暴露給業務層,全部交互都應經過靜態方法並傳遞所需的參數來完成。 get


#4樓

我發現內部使用過多。 您確實不該僅將某些功能暴露於某些類,而不會暴露給其餘使用者。

我認爲這破壞了接口,破壞了抽象。 這並非說永遠不該該使用它,而是更好的解決方案是重構到不一樣的類或在可能的狀況下以不一樣的方式使用。 可是,這並不是老是可能的。

可能致使問題的緣由是,另外一個開發人員可能要負責在與您相同的程序集中構建另外一個類。 具備內部結構會下降抽象的清晰度,而且若是濫用會致使問題。 就像您將其公開同樣,這將是一樣的問題。 就像任何外部類同樣,由其餘開發人員構建的另外一個類仍然是使用者。 類抽象和封裝並非僅用於保護外部類,也不能用於外部類,而是用於任何和全部類。

另外一個問題是,許多開發人員會認爲他們可能須要在程序集中的其餘位置使用它,而且不管如何都將其標記爲內部,即便他們當時不須要它。 而後,另外一位開發人員可能會認爲它值得一試。 一般,您但願在沒有明確需求以前將其標記爲私有。

可是其中一些多是主觀的,我並非說永遠不要使用它。 只需在須要時使用。


#5樓

我惟一使用過internal關鍵字的是我產品中的許可證檢查代碼;-)

相關文章
相關標籤/搜索