c# - c# 中的 protected 与 protected 内部(再次)

标签 c# .net protected access-modifiers

<分区>

我(再次)提出了一个关于 protectedprotected internal 的问题,因为我仍然不确定并且无法掌握它们。

非常感谢任何帮助。

//动态链接库 1

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

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

//动态链接库 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.

只要我从基类继承,我就可以从外部程序集访问 protectedprotected internal

相当困惑!两者看起来完全相似。任何人都可以通过修改上面的示例来解释我吗?

最佳答案

protected 意味着您可以从任何 子类型(当然还有声明类型本身)访问该成员。因此,无论该子类型位于何处,即使它在另一个程序集中,您仍然可以访问所有 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

关于c# - c# 中的 protected 与 protected 内部(再次),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22940317/

相关文章:

javascript - WCF 服务在 GoDaddy 上无法运行,如何调试?

c# - 对 asp.net mvc 中的身份验证非常困惑

c# - 在 C# 中发送电子邮件

.net - 如何在 Nuget 包中包含 resx 文件

C# .NET - Membership.ValidateUser 在网络中返回 false;在 Visual Studio 中真实

.net - 我在哪里可以找到关于 OpenXML 的好文档

java - 我可以在 Java 中模拟 protected 父类(super class)方法调用吗?

c++ - 通过此指针调用 protected 基类方法并转换为派生类中的基类 (C++)

c# - 当 ThreadB Monitor.Pulse(_locker) 哪个线程会先得到 _locker?

使用 protected 构造函数的 C++ 常量实例?