Access Modifiers
To promote encapsulation, a type or type member may limit its accessibility to other types and other assemblies by adding one of five access modifiers to the declaration:
public
Fully accessible. This is the implicit accessibility for members of an enum or interface.
internal
Accessible only within the containing assembly or friend assemblies. This is the default accessibility for non-nested types.
private
Accessible only within the containing type. This is the default accessibility for members of a class or struct.
protected
Accessible only within the containing type or subclasses.
protected internal
The union of
protected
andinternal
accessibility (this is more permissive thanprotected
orinternal
alone, in that it makes a member more accessible in two ways).
In the following example, Class2
is accessible from outside its assembly; Class1
is not:
class Class1 {} // Class1 is internal (default)
public
class Class2 {}
ClassB
exposes field x
to other types in the same assembly; ClassA
does not:
class ClassA { int x; } // x is private
class ClassB { internal
int x; }
When overriding a base class function, accessibility must be identical on the overridden function. The compiler prevents any inconsistent use of access modifiers—for example, a subclass itself can be less accessible than a base class, but not more.
Friend Assemblies
In advanced scenarios, you can expose internal
members to other
friend assemblies by adding the System.Runtime.CompilerServices.InternalsVisibleTo
assembly ...
Get C# 5.0 Pocket Reference now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.