6

protected访问说明符和internal protectedC#有什么区别?

4

9 回答 9

10

Internal可以在程序集中看到。

Protected从定义它的类继承的类可以看到。

Protected internal可以在从定义它的类派生的程序集或类型中看到(包括来自其他程序集的类型)。

请参阅:http: //msdn.microsoft.com/en-us/library/ba0a1yw2.aspx

从页面复制:

public              Access is not restricted.
protected           Access is limited to the containing class or types derived from the containing class.
internal            Access is limited to the current assembly.
protected internal  Access is limited to the current assembly or types derived from the containing class.
private             Access is limited to the containing type.
于 2010-08-17T07:43:29.860 回答
2

protected意味着只有当前类和从它派生的任何类都可以访问该成员。

internal表示当前程序集中的任何类都可以访问该成员。

protected internal本质上是指protected internal;即,从当前类(在任何程序集中)派生的所有类都可以访问该成员,就像当前程序集中的所有类一样。这与许多开发人员所期望的相反——这与andprotected internal的含义相同(它不是)。protected internal

于 2010-08-17T07:44:50.043 回答
2
  • internal- 同一程序集中的任何内容(.dll 或 .exe)都可以看到。
  • protected- 任何子类都可以看到,无论它们在哪里。
  • internal protected- 同一程序集任何子类中的任何东西都可以看到,无论它们在哪里。

Jeff Mattfield 所说的“内部进一步降低了这种可见性”的方式使其不清楚。internal并且protected只是不同的能见度。将两者结合在一起会使成员更加明显。没有显式访问修饰符的东西的默认可见性尽可能小。添加任何访问修饰符总是会增加可见性。

于 2010-08-17T07:47:54.727 回答
1

internal protected或者protected internal这在外部protected(从当前程序集外部)和内部public(从同一程序集内)是相同的。

于 2010-08-17T07:44:38.897 回答
1

受保护的内部受保护的访问说明符与继承的概念有关。

让我们举个例子来解释protectedprotected internal

有两个命名空间命名空间 A命名空间 B

命名空间 A中,有一个名为classA的类,它由一个名为accept()的方法组成,该方法使用受保护的访问说明符。

命名空间 B中,还有一个名为classB的类,它继承自命名空间 A的classA

现在借助这个受保护的说明符,我们可以访问命名空间 B的classB中的accept()方法。

但是当使用受保护的内部访问说明符时,该概念不正确:如果名称空间 A的classAaccept()函数使用受保护的内部访问说明符,则名称空间 BclassB无法访问它,因为该accept()函数只能在内部访问同一命名空间内的继承类。

于 2011-09-16T09:06:11.873 回答
1

- 更新答案 2019 -

嗨,您可以通过下表找到可访问性

在此处输入图像描述

于 2018-07-09T09:19:07.163 回答
0

为了更好地了解受保护和受保护内部之间的区别。最好先了解受保护和内部之间的区别。

内部变量引用同一个程序集。你不能在不同的程序集中访问。受保护的变量,如私有变量,但您可以在同一程序集或不同程序集中的驱动类中访问。

 namespace InternalTest   ----This namespace in assembly One
 {
    Public class A
    {
       B ol=new B();
        Console.WriteLine(ol.x);//Output:5  
        Console.WriteLine(ol.y);//error will occured. Because protected is like Private variable
    }

    public class B
     {
        Internal int x=5;
         Protected int y=5;

      }
 }

2)采取不同的组装。

     using InternalTest;   
     namespace InternalTest1   ----This namespace in assembly Two
     {
       Public class A1:B
        {
           Public void GetInternalValue()
          {                     return x; //error can't access because this is internal

          }

          Public void GetProtectedValue()
          {
                return y;//Work because it's protected

          }
      }
       public class C
       {


       }

    }

从上面的示例中可以清楚地看出,您可以在同一个程序集中访问内部,但不能在不同的程序集中访问。您可以在同一个程序集中说它看起来像公共变量。您可以通过创建类的对象来赋值

3)受保护的内部在同一个程序集中都有优点,它看起来像公共变量。在不同的程序集中你使用像受保护的变量

于 2013-08-16T18:18:01.410 回答
0

internal protected允许您从不是从同一对象派生的类访问同一程序集中的成员,但还允许您获得标准受保护访问以从另一个程序集中访问成员。它是内部的| 受保护,而不是内部和受保护(尽管 CLR 允许后者,但 C# 不允许)

于 2010-08-17T07:44:24.060 回答
-1

受保护

如果该类被声明为“受保护”,则意味着它可以被程序集中的子类以及程序集外部的子类访问。

内部的

如果该类被声明为“内部”,则意味着它可以被程序集中的任何类访问。

受保护的内部

如果该类被声明为“受保护的内部”,则意味着它只能由其派生类在程序集中进行访问。

于 2014-03-14T18:23:47.377 回答