[ Team LiB ] |
3.3 Access ModifiersTo promote encapsulation, a type or type member may hide itself from other types or other assemblies by adding one of the following five access modifiers to the declaration:
Note that a type member may be a nested type. Here is an example of using access modifiers: // Assembly1.dll using System; public class A { private int x=5; public void Foo( ) {Console.WriteLine (x);} protected static void Goo( ) { } protected internal class NestedType { } } internal class B { private void Hoo ( ) { A a1 = new A ( ); // ok Console.WriteLine(a1.x); // error, A.x is private A.NestedType n; // ok, A.NestedType is internal A.Goo( ); // error, A's Goo is protected } } // Assembly2.exe (references Assembly1.dll) using System; class C : A { // C defaults to internal static void Main( ) { // Main defaults to private A a1 = new A( ); // ok a1.Foo( ); // ok C.Goo( ); // ok, inherits A's protected static member new A.NestedType( ); // ok, A.NestedType is protected new B( ); // error, Assembly 1's B is internal Console.WriteLine(x); // error, A's x is private } } 3.3.1 Restrictions on Access ModifiersA type or type member cannot declare itself to be more accessible than any of the types it uses in the declaration. For instance, a class cannot be public if it derives from an internal class, or a method cannot be protected if the type of one of its parameters is internal to the assembly. The rationale behind this restriction is whatever is accessible to another type is actually usable by that type. In addition, access modifiers cannot be used when they conflict with the purpose of inheritance modifiers. For example, a virtual (or abstract) member cannot be declared private, since it would be impossible to override. Similarly, a sealed class cannot define new protected members, since there is no class that could benefit from this accessibility. Finally, to maintain the contract of a base class, a function member with the override modifier must have the same accessibility as the virtual member it overrides. |
[ Team LiB ] |