- - PR -
Publicメソッドを隠したい
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-06-27 11:40
msoです。
クラスの設計で躓いております。 なんとなく無理そうなのですが、技術的に 可能かどうかを教えていただけ無いでしょうか? 環境:C#(.NetFramework2.0)
上記のコードでClass1を継承したClass2でメソッドhogeを使えないように したいと考えています。 以前はこのようなケースは強制的に例外を発生させていたのですが、 あまり使い勝手がよくないため何か他の方法は無いかと検討しております。 #class2のhogeは現在、ビルドのタイミングでエラーが発生します。 良い知恵があれば教えてください。 よろしくお願いします。 [ メッセージ編集済み 編集者: mso 編集日時 2007-06-27 11:41 ] | ||||
|
投稿日時: 2007-06-27 11:47
最近似たような話題がありました。参考になれば幸いです。
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-06-27 12:55
再設計を検討するのが妥当なのでしょうけど、こういうシナリオはなくはないんですよね。
派生クラスでは、例外をスローで良いと思いますよ。コンパイル時に検出できないのが難点ですが、単体テスト時点で分かるのでまぁいいかなと。 .NET Framework Class Library でも、そのような設計になっているクラスがいくつかあったような気がします。具体的にどれかは忘れましたが。 NotSupportedException などをスローすれば、尚良しというところでしょうか。 _________________ 囚人のジレンマな日々 | ||||
|
投稿日時: 2007-06-27 13:02
読み違えているだけかもしれませんが、派生クラスでのお話ならば Obsolete 属性でコンパイル時に解決できるのではないでしょうか。(古い形式扱いを受けるのはイヤというのはありますけど) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-06-27 14:29
msoです。
最近のやつは・・・・検索しておりませんでした。 申し訳ありません。 検討してみます。 ちなみに当初はObsoleteも検討したのですが、 美しくないので後回しにしていました。 記述しないで申し訳ありません。 [ メッセージ編集済み 編集者: mso 編集日時 2007-06-27 14:30 ] | ||||
|
投稿日時: 2007-06-27 14:59
何をもって "美しくない" と思ったのでしょうか? 例外をスローするのは美しい、もしくは Obsolete 属性よりは美しいと感じたということですよね。その理由をお聞かせ願えないでしょうか? Obsolete 属性は古い形式扱いを受けますが、コンパイル時に解決できるというメリットがあります。例外をスローする方法は実行時でないと検出できません。 個人的には設計が好ましくない以上は何をとっても "美しくない" と思います。そしてそれを根本的に解決するには、設計にメスを入れるしかありません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-06-27 15:11
msoです。
諸事情で細かいことをすべて説明することは出来ないのですが、 使わないメソッドが存在することが「美しくない」と表現しました。 Obsolete 属性はたしかにビルド時に発見できて便利だと思います。 ちなみに、現在は設計を変更する方向で考えています。 | ||||
|
投稿日時: 2007-06-27 15:41
例外をスローするにしてもそれは同じだと思います。 私が伺っていたのは '例外をスローする方法と比べて後回しにしたその理由' です。なぜならば、"美しくないので後回しにしていました" と書かれていたからです。比べて後回しにしたくなる固有のデメリット (美しくない) があるとお考えなのだと思い参考までに伺ったのですが、どうやら無関係のようですね。忘れてください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |