加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 20:06:39 所属栏目:百科 来源:网络整理
导读:参见英文答案 What is the difference between ‘protected’ and ‘protected internal’?????????????????????????????????????10个 我正在提出一个问题(再次)关于受保护的内容,因为我仍然不确定并且无法控制它们. 任何帮助深表感谢. // DLL 1 namespace A
参见英文答案 > 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读