Protected Classes in .NET

无人久伴 提交于 2019-12-03 19:07:01

问题


Can a class be protected in.NET?
Why is / isn't this possible?


回答1:


Yes, 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)




回答2:


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.




回答3:


Yes, we just cannot make them top level classes, they must be inner classes




回答4:


A protected class could not be defined inside a namespace.It could only be declared as a nested class. It could be instantiated inside other nested classes and could be inherited by other nested classes and It can inherit from other nested classes.

A protected member of a parent class could be accessed by the nested classes as well as the classes that inherit from the parent class (Derived Class or Child Class).



来源:https://stackoverflow.com/questions/1017778/protected-classes-in-net

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!