基底メンバの隠蔽?

タグの編集
投稿者 やってみますぅ  () 投稿日時 2008/5/16 20:13:00
はじめまして。 
TextBoxクラスを継承して機能を限定したクラスを作成したいのですが、基底クラスのメンバ(プロパティやメソッド)はひとつずつShadowsで定義して隠さなければならないのでしょうか? 
全てのメンバを一気に隠す方法はないものなのでしょうか?
投稿者 よねKEN  () 投稿日時 2008/5/16 20:47:00
> 全てのメンバを一気に隠す方法はないものなのでしょうか? 
 
ありません。 
継承は原則として機能を追加するもので、機能の縮小を行うものではないためです。 
 
ただ、この前提の元では、子のクラスで新しく追加したい機能(メソッドなど)でたまたま親にも同じ名前の機能が既に定義されている場合、機能追加できなくなるため、その回避手段としてShadowsがあります。
投稿者 やってみますぅ  () 投稿日時 2008/5/17 01:30:00
よねKEN さんありがとうございます。 
 
> ありません。  
> 継承は原則として機能を追加するもので、機能の縮小を行うものではないためです。 
 
追加する機能の設計が甘いせいでプロパティに想定外の値がセットされるとマズイ箇所が何箇所かあるもので... 
 
もうひとつ質問なのですが、基底クラスのプロパティをShadowsしておき<System.ComponentModel.Browsable(False)>の属性(?)を付加するとプロパティウインドウに表示されなくなりますが、コードエディタ(?)のメンバのヒント(??)には表示されてしまいます。 
これは<System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)>を付加すれば表示されなくるのですが、この方法で問題ないのでしょうか? 
これらは単にウインドウやヒントが表示されなくなるだけで、手入力すればコンパイルできてしまいます。コンパイル時にエラーにさせる方法はないものでしょうか?
投稿者 よねKEN  () 投稿日時 2008/5/17 02:49:00
>>2 
 
適切な方法かどうかは別として、Obsolete属性はどうでしょうか? 
http://homepage1.nifty.com/rucio/main/dotnet/technique/teq3_Attribute.htm 
#すみません。試しては居ません。
投稿者 るきお  () 投稿日時 2008/5/17 03:46:00
中級講座第3回 
http://homepage1.nifty.com/rucio/main/VBdotNet/Advance/Advance3.htm 
の「4.機能の削除」のところで同じようなテーマを扱っています。 
トリッキーな手段としてShadows Eventを使ってメンバを隠蔽する方法も紹介しています。コンパイル時にエラーにもできますよ。ただトリッキーですので採用の際はよくご検討ください。