1.類型的可訪問性工具
a.關鍵字有public、internal,其中public表示該類型對於程序集均可見、internal表示該類型僅對當前程序集可見。此處的類型能夠爲類、接口、結構等。spa
b.若是不顯式指定類型的訪問行,internal爲類型的默認值。code
c.友元程序集接口
應用場景:公司的TeamA在程序集中定義了一組工具類型(UtilityType),可訪問性爲internal,公司的TeamB但願在另外的程序集使用這些類型。ci
若是直接將工具類型修改成public,其它使用TeamA程序集的團隊或者公司就能夠修改和使用UtilityType中的類型,這顯示是不合理的。it
可否將UtilityType定義internal,可是TeamB仍是可以使用它們呢?table
使用InternalsVisibleTo的Attribute,TeamB便可自由使用TeamA中的UtilityTypeclass
using System.Runtime.CompilerServices; //當前程序集的UserGroup類型可由TeamB的任何代碼訪問 [assembly: InternalsVisibleTo("TeamB")] namespace TeamA { class UtilityType{ }}
2.成員的可訪問性
public | 全部程序集、全部方法均可以訪問 |
protected internal程序 |
當前程序集或者派生類中可用 |
protected方法 |
派生類可用(可在不一樣程序集) |
interna | 當前程序集可用 |
private |
當前類可用 |
a.任何成員想要被訪問,都須要在可見的類型內定義。好比說AssemblyA中定義了一個internal類型,該類型有一個public方法。AssemblyB中就不能使用AssemblyA中的這個public方法。由於internal類型對AssemblyB不可用。
b.成員的默承認訪問性爲private
c.接口成員的可訪問性不須要手工指定,默認爲public
d.C#規定重寫方法的可訪問性必須跟基類方法的可訪問性相同,訪問限制更寬鬆都不行。