2010-08-17 49 views
6

访问说明符protectedinternal protected在C#之间有什么区别?访问说明符受保护和内部保护在C#之间有什么区别#

+0

可能的重复[什么是受保护的内部意味着净](http://stackoverflow.com/questions/2651137/what-does-protected-internal-means-in-net)和[有什么区别'受保护'和'受保护的内部'](http://stackoverflow.com/questions/585859/what-is-the-difference-between-protected-and-protected-internal) – 2010-08-19 18:58:28

回答

10

Internal可以在程序集中看到。

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

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

参见: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. 
+0

受保护的内部是什么?不会自己保护做完全相同的事情? – 2010-08-25 06:27:49

+0

@Vince,不,如果它是'protected internal',并且你从另一个程序集中的类中派生出来,那么你将无法访问该方法等等。但是如果它只是被“保护”的话,你会的。 – 2010-08-25 07:00:20

+0

如果我无法访问其他程序集中的方法,那么我可以将其标记为内部而不是受保护的内部。我在这里错过了什么吗? :) – 2010-08-25 10:59:30

0

internal protected允许你从哪个不是从同一个对象的派生类在同一装配体中的成员,也可以让保护标准访问您从另一个程序集访问成员。这是内部|保护的,而不是内部&保护(虽然CLR允许后者,C#不)

+1

请参阅http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx。 – 2010-08-17 07:47:49

+0

呃,我在找什么? – 2010-08-17 07:50:01

+0

根据我的理解,受保护的内部没有任何意义,受保护的内部与受保护的受保护的内容相同,并允许您执行完全相同的操作 – 2010-08-30 01:06:35

1

internal protectedprotected internal这是相同的装置外部protected(从当前组件外)和内部public(来自相同组件内)。

2

protected表示只有当前类和从它派生的任何类都有权访问该成员。

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

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

2
  • internal - 可由同一程序集(.dll或.exe)中的任何内容显示。
  • protected - 任何子类都可见,不管它们在哪里。
  • internal protected - 通过同一程序集内的任何东西可见任何子类,不管它们在哪里。

杰夫马特菲尔德说“内部进一步降低能见度”的方式使其不清楚。 internalprotected只是不同的可见性。将两者放在一起使成员更可见。没有显式访问修饰符的默认可见性尽可能小。添加任何访问修饰符总是会增加可见性。

1

受保护的内部受保护访问说明符涉及到继承的概念。

让我们来举例说明受保护的受保护的内部

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

命名空间的,还有一类命名为CLASSA它由一个命名的方法的接受()使用保护访问说明符。

命名空间乙,还有另一类,名为CLASSB,它从CLASSA 命名空间甲继承。

现在有了这个保护符的帮助下,我们可以访问接受()方法命名空间乙CLASSB

但使用保护内部访问说明符时的概念是不正确的: 如果接受()CLASSA一个使用保护内部访问符命名空间的功能,然后CLASSB命名空间B无法访问它,因为accept()函数只能在相同命名空间内的继承类中访问。

0

为了更好地理解受保护和受保护Internal.it之间的区别,最好先了解Protected和internal之间的区别。

内部变量指的是相同的程序集。不能在不同的程序集中访问。 受保护的变量与私有变量类似,但您可以在相同的程序集或不同的程序集中访问驱动类。 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 
     { 


     } 

    } 

从上面的例子就清除您可以访问相同的组件内部而不是在不同的assembly.You可以在同一个装配它的样子说喜欢公共variable.you可以通过创建类的对象赋值

3)受保护的内部在相同的程序集中都具有公共变量的优点。 在你使用像保护变量

-1

受保护

如果类被声明为“受保护” diifrent装配装置,它可以通过在组件中的子类,以及从组件外子类进行访问。

INTERNAL

如果该类被声明为“内部”是指其可通过在组件内的任何类进行访问。

保护的内部

如果该类被声明为“受保护的内部”是指其可以在组件内仅由它们的派生类访问。