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
  • internal-同じアセンブリ(.dllまたは.exe)内のすべてのものから表示されます。
  • protected-どこにいても、どのサブクラスでも表示できます。
  • internal protected-同じアセンブリ内のすべてのサブクラス、それらがどこにあるかに関係なく、すべてのサブクラスから表示されます。

ジェフ・マットフィールドが「内部はその可視性をさらに低下させる」と言う方法は、それを不明確にします。internalprotectedは単に異なる可視性です。両方を一緒にすると、メンバーがより見やすくなります。明示的なアクセス修飾子がないもののデフォルトの可視性は、可能な限り小さくなります。アクセス修飾子を追加すると、常に可視性が向上します。

于 2010-08-17T07:47:54.727 に答える
2

protected現在のクラスとその派生クラスのみがメンバーにアクセスできることを意味します。

internal現在のアセンブリ内のすべてのクラスがメンバーにアクセスできることを意味します。

protected internal本質的にprotected または internalを意味します。つまり、(任意のアセンブリ内の) 現在のクラスから派生するすべてのクラスは、現在のアセンブリ内のすべてのクラスと同様に、メンバーにアクセスできます。これは、多くの開発者が期待していることとは対照的です。これは、and とprotected internal同じことを意味します(そうではありません)。protected internal

于 2010-08-17T07:44:50.043 に答える
1

internal protectedまたは、protected internalこれは外部protected(現在のアセンブリの外部から) と内部public(同じアセンブリ内から) で同じ意味です。

于 2010-08-17T07:44:38.897 に答える
1

Protected internalおよびprotectedアクセス指定子は、継承の概念に関連しています。

protectedprotected internalを説明するために例を挙げてみましょう。

名前空間 A名前空間 Bという名前の2 つの名前空間があります。

名前空間 Aには、保護されたアクセス指定子を使用するaccept()という名前のメソッドで構成されるclassAという名前のクラスがあります。

名前空間 Bには、名前空間 A のclassAから継承するclassBという名前の別のクラスがあります。

この保護された指定子の助けを借りて、名前空間 BのclassBでそのaccept()メソッドにアクセスできます。

しかし、保護された内部アクセス指定子を使用する場合、その概念は当てはまりません。名前空間 AのclassAのaccept ( )関数が保護された内部アクセス指定子を使用していた場合、名前空間 BのclassBはそれにアクセスできません。同じ名前空間内の継承されたクラス。

于 2011-09-16T09:06:11.873 に答える
0

internal protected同じオブジェクトから派生していないクラスから同じアセンブリ内のメンバーにアクセスできますが、別のアセンブリからメンバーにアクセスするために取得する標準の保護されたアクセスも許可します。内部です | protected、not internal & protected (ただし、CLR では後者が許可されていますが、C# では許可されていません)

于 2010-08-17T07:44:24.060 に答える
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 に答える