Can a class be protected in.NET?
Why is / isn't this possible?
views:
566answers:
3Yes, you just cannot make them top level classes, they must be inner classes
public class Outer
{
protected class Foo
{
}
}
This is fine, it means that the only classes allowed to see Foo are sub classes of Outer
class X
{
// 'Outer.Foo' is inaccessible due to its protection level
private void Flibble(Outer.Foo foo)
{
}
}
class X : Outer
{
// fine
private void Flibble(Outer.Foo foo)
{
}
}
Note that you cannot declare any outer class as private, protected (or protected internal) in c# since the access modifier for outer level classes defines their visibility in relation to other assemblies. Specifically visible within the assembly only (or to friends via InternalsVisibleTo) or outside the assembly.
Thus whilst the public/internal identifiers are used here for consistency really the state in IL is simply 'Public' or 'NonPublic' (as the Reflection.Emit flags show)
protected
visibility is used to indicate 'visible to derived classes'. This makes sense on things inside a class, but normally has no meaning at the class level.
The only exception to this is an inner class, where protected visibility means that derived classes will have access to the inner class.
Yes, we just cannot make them top level classes, they must be inner classes