This is preliminary documentation and subject to change.
To comment on this topic, please send us email at ngwssdk@microsoft.com. Thanks!
3.3.4 Accessibility constraints
Several constructs in the C# language require a type to be at least as accessible as a member or another type. A type T
is said to be at least as accessible as a member or type M
if the accessibility domain of T
is a superset of the accessibility domain of M
. In other words, T
is at least as accessible as M
if T
is accessible in all contexts where M
is accessible.
The following accessibility constraints exist:
- The direct base class of a class type must be at least as accessible as the class type itself.
- The explicit base interfaces of an interface type must be at least as accessible as the interface type itself.
- The return type and parameter types of a delegate type must be at least as accessible as the delegate type itself.
- The type of a constant must be at least as accessible as the constant itself.
- The type of a field must be at least as accessible as the field itself.
- The return type and parameter types of a method must be at least as accessible as the method itself.
- The type of a property must be at least as accessible as the property itself.
- The type of an event must be at least as accessible as the event itself.
- The type and parameter types of an indexer must be at least as accessible as the indexer itself.
- The return type and parameter types of an operator must be at least as accessible as the operator itself.
- The parameter types of a constructor must be at least as accessible as the constructor itself.
In the example
class A {...}
public class B: A {...}
the B
class is in error because A
is not at least as accessible as B
.
Likewise, in the example
class A {...}
public class B
{
A F() {...}
internal A G() {...}
public A H() {...}
}
the H
method in B
is in error because the return type A
is not at least as accessible as the method.