微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

受保护与受保护的内部(再次)在c#中

参见英文答案 > What is the difference between ‘protected’ and ‘protected internal’?                                    10个
我正在提出一个问题(再次)关于受保护的内容,因为我仍然不确定并且无法控制它们.

任何帮助深表感谢.

// DLL 1

namespace Assembly1
  {
    class class1 : class2
    {
      static void Main()
      {
         new class1().test();
      }

      private void test()
      {
         Console.WriteLine(this.sample);
      }
    }
 }

// DLL 2

namespace Assembly2
    {
        public class class2
        {
          // protected string sample = "Test";           
             protected internal string sample = "Test";

       //Same behavior when using protected and protected internal. Why ?

    }
}

我对这两行都有相同的行为.

// protected string sample = "Test";           
         protected internal string sample = "Test";

但我相信应该有一些区别.

MSDN says:
Protected: Access is limited to the containing class or types derived from the containing class.

Protected Internal: Access is limited to the current assembly or types derived from the containing class.

只要我从基类继承,我就可以从外部程序集访问受保护和受保护的内部.

很混乱!两者看起来完全相似.任何人都可以通过修改上面的例子来解释我吗?

解决方法

protected意味着您可以从任何子类型(当然还有声明类型本身)访问该成员.因此,无论该子类型在哪里,即使它在另一个程序集中,您仍然可以访问所有受保护的成员.

internal表示您可以从同一程序集中的任何类型访问该成员.因此,即使是位于同一程序集中的完全不相关的类也可以访问该成员.

protected internal结合了两者,意味着两者都单独应用.因此,您可以从任何子类型访问该成员,也可以从同一程序集中的任何类型访问该成员.

// Assembly 1
class A {
    protected int foo;
    internal int bar;
    protected internal int baz;
}

class B : A {} // can access: foo,bar,baz
class C {} // can access: bar,baz

// Assembly 2
class D : A {} // can access: foo,baz
class E {} // can access neither

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐