- - PR -
継承元のパブリックメソッドを外部に隠ぺいしたい
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-06-20 16:27
よろしくお願いします。
文章だけでわかりにくいかもしれませんが、 クラス(A)にパブリックなメソッドAAがあり、クラス(A)のインスタンスからはメソッド(AA)を呼び出せるようにしたいが、クラス(A)を継承するクラス(B)のインスタンスからはメソッド(AA)を隠ぺいする(参照できなくする)方法はあるのでしょうか? クラスBでnewキーワード(C#)かOverrideキーワードによって空のメソッドAAを定義して、メソッドそのものを無効にするしか方法はないのでしょうか? | ||||||||
|
投稿日時: 2007-06-20 16:51
(1) 外から見えないようにしたい(呼び出すとコンパイルエラーになる)
(2) 呼ばれても何も起こらないようにしたい の、どっちですか? 普通、隠蔽という言葉は (1) の意味なのですが
このあたりを読む限りでは、実は (2) の意なんじゃないかと思いました。 | ||||||||
|
投稿日時: 2007-06-20 16:52
#回答ではありません
Aを継承したBは、「Aである」と同義です。 なので、外へ公開しているのに自分で自身のメソッドを見れないということになり矛盾してませんか? BがAを継承しているということはAを知っている、つまりAを意識しているということです。 知っているなら「呼ばなければよい」ということになりませんか? | ||||||||
|
投稿日時: 2007-06-20 16:55
混乱。。。
・Bの実装内部で呼べなくする ・Bの利用者が呼べない のどっちでしょう? #クラス(B)のインスタンス「からは」という言葉から先の投稿となりました。 | ||||||||
|
投稿日時: 2007-06-20 17:02
回答ありがとうございます。
--------------------------- KIさん 私の希望する処理は(1)です。 IntelliSenseにリストされてこないようにしたいです。 --------------------------- まどかさん おっしゃる通りですが、数多くあるメソッドのうち一部のメソッドをそうしたいのであり、かつ、クラスAのインスタンスも存在しておりそのインスタンスからは当然のごとく全てのメソッドを呼び出す必要がある場合です。 | ||||||||
|
投稿日時: 2007-06-20 17:14
いえいえ、「外から見えなくする」という意味では私の先の投稿は無視してください。 C#はVBのShadowsとピッタンコのってないのかな? 全派生先ならSealedでOK? | ||||||||
|
投稿日時: 2007-06-20 17:32
jornada690さんは隠ぺいという言葉を使ってらっしゃいますが、.NETの世界では隠蔽という概念があります。
こういうクラスがあったとします。F()はDerived内でオーバーライドされています。G()は隠蔽されています。
このように呼び出した場合、結果は Derived.F Base.G Derived.F Derived.G となります。 jornada690さんが求めているのはこの隠蔽(つまりメソッドGの動き)じゃないですよね。 クラス(A)のメソッド(AA)は呼べるわけですが、上の例のようにクラス(B)のインスタンスをクラス(A)として参照している場合はどうなると考えていらっしゃいますか? 単にインテリセンスに出なければ呼び出せてもいいということでしょうか。 | ||||||||
|
投稿日時: 2007-06-20 17:41
はじめまして。
これを満たすには、メソッドをOverrideして、 EditorBrowsableAttribute(インテリセンスに出さないようにする)を設定するのが いいのではないでしょうか? |
1|2|3
次のページへ»