受保护的内部访问说明符的含义在下面的代码中

时间:2013-03-14 13:21:58

标签: c# asp.net protected access-modifiers

好的,让我先从一个例子开始。这是我在另一个程序集中的基类

namespace BL
{
    public class BasicClass
    {
        protected internal void func()
        {
            //Code Logic
        }
    }
}

现在这是我在另一个程序集中的派生类

namespace DL
{
    public class DerivedClass:BasicClass
    {
        private void hello()
        {
            func();
        }
    }
}

我可以从基类中调用func(),因此它显示了protected访问修饰符属性但是internal访问修饰符属性如何。应该允许它自其声明内部以来访问另一个程序集内的func()。如果是这样,那么为什么称它为protected internal而不是简单protected

4 个答案:

答案 0 :(得分:5)

您可能想要this阅读。

  

受保护的内部辅助功能级别表示受保护的OR内部,而非受保护的AND内部。换句话说,可以从同一程序集中的任何类访问受保护的内部成员,包括派生类。要限制只能在同一程序集中派生类的可访问性,请将类本身声明为内部,并将其成员声明为protected。

答案 1 :(得分:4)

Internal表示该类的成员可用于同一程序集中的所有类,但不可用于程序集外的任何类。 Protected internal表示同一程序集中的任何类都可以访问该成员,任何其他程序集中的任何子类都可以访问。

MSDN topic on access modifiers供参考:

  

受保护的内部

     

类型或成员可以由声明它的程序集中的任何代码访问,也可以从另一个程序集中的派生类中访问。来自另一个程序集的访问必须在一个类声明中进行,该声明派生自声明受保护的内部元素的类,并且它必须通过派生类类型的实例进行。

答案 2 :(得分:0)

来自MSDN(点击了解更多信息):

<强>保护

类型或成员只能由同一类或结构中的代码或派生类访问。

<强>内部

类型或成员可以由同一程序集中的任何代码访问,但不能从其他程序集访问。

受保护的内部

类型或成员可以由同一程序集中的任何代码访问,也可以由另一个程序集中的任何派生类访问。

答案 3 :(得分:0)

“当受保护内部的”内部“完全没有意义时,保护内部的某些东西有什么用处”:

在程序集BL,Class X中,您可以直接使用新的BasicClass()。func(),因为您设置了“internal”标志。如果未设置此标志,则类X需要从BasicClass派生才能访问func()。