4

ClassA他のクラスの基本クラスであるクラスがあります。このクラス コンストラクターを内部および保護して、アセンブリの外部から継承およびインスタンス化できないようにしたい (それを継承する他の内部クラスがあるため、シールすることはできません。他の関連する質問を参照してください) here )なので、次のように変更しました。

public abstract ClassA{
    internal protected ClassA(){
    }
}

組み合わせがORinternal protectedとして解釈され、明らかにコンストラクターのみを作成するため、これは機能しないと言われました:((外部から見える)internalprotectedprotected

質問

  1. それが本当なら、なぜ はANDではなくORinternal protectedとして解釈されるのですか?internalprotectedinternalprotected
  2. コンストラクターを内部および保護されていると宣言する方法はありますか?
4

3 に答える 3

7

internal を指定するだけで十分です。

これは抽象クラスです。インスタンスを作成できないため、コンストラクターが保護されていることを暗示しています。継承する以外に何もできません。

于 2012-06-26T08:09:08.027 に答える
4

コンストラクターをinternalとして指定すると、アセンブリ内のすべてのクラスで表示され、それ以外のクラスでは表示されません。これは、まさにあなたが達成したいことです。つまり、コンストラクターまたはクラス A のクラス メンバーが次の場合:

  • Protected - A および他のアセンブリで A から継承するすべてのクラスに表示されます
  • 内部- クラス A のアセンブリ内のすべてのクラスに表示されます
  • Protected Internal - A および他のアセンブリ内の A から継承するすべてのクラス、および A のアセンブリ内のすべてのクラスから参照可能

そのため、コンストラクターを内部として指定するだけで済みます。

于 2012-06-26T09:11:43.577 に答える
0

試しましたか ?

MSDNはそれを教えてください

コンストラクターは、public、private、protected、internal、または protected internal としてマークできます。

http://msdn.microsoft.com/en-us/library/ms173115%28v=vs.100%29.aspx

于 2012-06-26T08:09:00.793 に答える