2010-08-17 60 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

如果該類被聲明爲「內部」是指其可通過在組件內的任何類進行訪問。

保護的內部

如果該類被聲明爲「受保護的內部」是指其可以在組件內僅由它們的派生類訪問。

相關問題