0

多くのパブリック プロパティを持つ基本クラスを作成し、完全に使用しました。このクラスを使用して他のクラスを派生させたいのですが、そのプロパティの一部を、それを継承する派生クラスの外部に公開したくありません。パブリックな基本クラスのプロパティをその派生クラスの外部に公開できない方法はありますか (非表示にするプロパティは、それを継承する他のクラスで使用されるため、パブリックです)。

4

3 に答える 3

5

あなたはそれらを保護したいと考えています。

MSDN から:
保護されたメンバーは、そのクラス内および派生クラス インスタンスからアクセスできます。

于 2012-03-01T18:50:12.330 に答える
1

それらを保護することについてcadrell0に同意しますが、プロパティが実際publicにはあるが、特定の派生クラスのユーザーには隠されているソリューションを探している場合に備えて、明示的なインターフェイスを使用できます

interface IHaveMethodsYouCanHide { void Foo(); }
class Base : IHaveMethodsYouCanHide { public void Foo() {} }
class NonHidingDerived : Base { }
class HidingDerived : Base, IHaveMethodsYouCanHide
{
  void IHaveMethodsYouCanHide.Foo() {}
}

このコードでは、タイプ HidingDerived の識別子は Foo の呼び出しを許可しません (最初に IHaveMethodsYouCanHide にキャストしない限り)。

于 2012-03-01T19:06:24.177 に答える
1

あなたが求めていることは、単に不可能です。タイプ B がタイプ A から継承する場合、それは「タイプ A」です。B には、少なくともタイプ A と同じアクセス可能なコントラクトがあります。このコントラクトに根本的に違反することなく、A のパブリック メンバーを非表示にする方法はありません。

A を使用したいが、プロパティのサブセットのみを公開するシナリオにいることに気付いた場合、継承は適切な解決策ではありません。包含は適切な解決策です。

public class B { 
  private A m_wrapped;

  // Expose only the properties you want to expose here
}
于 2012-03-01T19:11:47.993 に答える