- - PR -
【C#.NET】基底クラスに、なにか制限事項はありますか?
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-02-24 13:41
こんにちは。いつもお世話になってます。
Windows コンソールアプリケーションに、クラスライブラリ(.dll)を基底クラスにするのは問題ありますでしょうか? 例えば、"BatchExe"というWindows コンソールアプリケーションをつくり、アセンブリ"Jp.Co.Company.Mag.Fw.BaseModule.Library"の"LibraryBase"というクラスを継承させています。("LibraryBase"には便利なメソッドをいくつも入れています。) ///サンプルはじまり //省略 using Jp.Co.Company.Mag.Fw.BaseModule.Library; namespace Jp.Co.Company.Batch.Exe.UpdateUser { public class BatchExe : LibraryBase { [STAThread] static void Main(string[] args) { try { //省略 } } } ///サンプルここまで シングルで実行しているだけですが、今のところ変なな動作はしておりませんでした。 動かないわけではないのですが、技術的にやってはいけないことか気になりまして。。。 なにか問題をご存知でしたら、教えてください。 どうぞよろしくお願いします。 | ||||||||
|
投稿日時: 2005-02-24 13:54
それらを継承させる必要があるのでしょうか?
#ま、普通なら継承なんてさせませんな。 継承は最終手段くらいに思っておきましょう。 で、便利なメソッドって同一のクラスに無いといけないもの? staticにすべきものはないですか? 単体クラスにすべきものはないですか? #中身見ないと分かりません _________________ 中博俊 MSMVP Visual Studio C# Since 2004/04-2005/03, MCP http://naka.wankuma.com/ http://blogs.wankuma.com/naka/ naka@wankuma.com | ||||||||
|
投稿日時: 2005-02-24 14:04
静的なクラスに "機能単位" で集約させるべきではないでしょうか? 宜しかったら、継承させる "理由" を教えて頂けませんでしょうか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2005-02-24 14:09
LibraryBaseとBatchEXEが「汎化」関係にあるかどうかが
継承にするかどうかの判断の基準です。 単なるユーティリティであれば、普通に呼んで使うだけです。 継承にするメリットはありません。 制限事項としては、「多重継承不可」があげられます。 | ||||||||
|
投稿日時: 2005-02-24 14:46
便利であるから抽象クラスでどさっとメソッドを持ちました、というのは説得力がありません。kanaiさんの書き込みのように、まずは、汎化・特化関係かどうかが大事です。 それで問題なく、そのメソッドが汎化クラスにあるのに違和感がないならよいのではないでしょうか。違和感があるならメソッドの移動をしましょう。
コードが動くかどうか、というレベルでしたら動くでしょう。 しかし、よいコードになっているかどうか、でしたら、よいほうではない可能性があります。 _________________ たつごろー codeseek こみゅぷらす | ||||||||
|
投稿日時: 2005-02-24 15:30
返信ありがとうございます。
LibraryBaseには、トランザクション管理メソッド・データセット・アレイリスト・XMLの変換メソッドが入っていました。 BatchEXEはこれを利用しているだけでしたので、継承する必要はありませんね。標準化や共通化をするあまり、継承の基本である「汎化関係」を忘れてしまいました。オブジェクト指向設計モデルは、慣れるまで時間がかかりそうです。。。 作法として、「継承は最終手段」や「多重継承不可」を念頭におきたいと思います。 中博俊さん,じゃんぬねっとさん,kanaiさん,たつごろーさん ご意見ありがとうございました。 [ メッセージ編集済み 編集者: あき 編集日時 2005-02-24 15:33 ] |
1