あなたが望むことを達成する方法があります-あなたが見たくないメンバーを隠す-しかし、カスタムインターフェースを使用して他の人の協力を必要とせずに、それを自動的に適用させます。これを行うには、表示したくないすべてのメンバーを再導入し、それらに属性のタグを付けます。
これは、たとえば、基本クラスのプロパティが特定の子孫にとって何の意味も持たない場合にWindowsフォームが行うことです。たとえば、ControlにはTextプロパティがありますが、たとえばTabControlではTextプロパティは無意味です。そのため、TabControlはTextプロパティをオーバーライドし、そのオーバーライドに「ちなみに、プロパティグリッドまたはIntellisenseにTextプロパティを表示しないでください」という属性を追加します。プロパティはまだ存在しますが、表示されないため、邪魔になりません。
[EditorBrowsable(EditorBrowsableState.Never)]属性をメンバー(プロパティまたはメソッド)に追加すると、Intellisenseはそのメンバーをコード補完リストに表示しなくなります。私があなたの質問を正しく理解しているなら、これはあなたが達成しようとしている大きなことです:アプリケーションコードが誤ってメンバーを使用するのを難しくします。
プロパティの場合は、プロパティグリッドからプロパティを非表示にする[Browsable(false)]と、デザイナーがプロパティの値を.designer.csファイルに書き込まないようにする[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]も追加することをお勧めします。
これらは、メソッド/プロパティを誤って使用することを非常に困難にします。ただし、それでも保証はありません。保証が必要な場合は、[Obsolete]属性もスローし、「警告をエラーとして扱う」を使用してビルドします。これで問題は解決します。
ベースメンバーが仮想の場合は、おそらくそれをオーバーライドし、オーバーライドでベースを呼び出すだけにします。オーバーライドされたメンバーは、通常のイベントの過程で基本クラスによって呼び出される可能性があるため、例外をスローしないでください。一方、ベースメンバーが仮想でない場合は、「オーバーライド」ではなく「新規」を使用する必要があります。実装でベースを呼び出すか、単に例外をスローするかを決定できます。誰も使用しないでください。とにかくあなたの再紹介されたメンバーなので、それは問題ではないはずです。
public class Widget : UserControl
{
// The Text property is virtual in the base Control class.
// Override and call base.
[EditorBrowsable(EditorBrowsableState.Never)]
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[Obsolete("The Text property does not apply to the Widget class.")]
public override string Text
{
get { return base.Text; }
set { base.Text = value; }
}
// The CanFocus property is non-virtual in the base Control class.
// Reintroduce with new, and throw if anyone dares to call it.
[EditorBrowsable(EditorBrowsableState.Never)]
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[Obsolete("The CanFocus property does not apply to the Widget class.")]
public new bool CanFocus
{
get { throw new NotSupportedException(); }
}
// The Hide method is non-virtual in the base Control class.
// Note that Browsable and DesignerSerializationVisibility are
// not needed for methods, only properties.
[EditorBrowsable(EditorBrowsableState.Never)]
[Obsolete("The Hide method does not apply to the Widget class.")]
public new void Hide()
{
throw new NotSupportedException();
}
}
はい、これはかなりの作業ですが、1回だけ行う必要があります...メンバーごと、クラスごと...うーん、ええ。しかし、それらの基本クラスのメンバーが実際にあなたのクラスに当てはまらず、そこにいると混乱が生じる場合は、努力する価値があるかもしれません。