- PR -

【C#.NET】基底クラスに、なにか制限事項はありますか?

1
投稿者投稿内容
あき
ベテラン
会議室デビュー日: 2003/07/23
投稿数: 72
投稿日時: 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
{
//省略
}
}
}
///サンプルここまで

シングルで実行しているだけですが、今のところ変なな動作はしておりませんでした。
動かないわけではないのですが、技術的にやってはいけないことか気になりまして。。。

なにか問題をご存知でしたら、教えてください。
どうぞよろしくお願いします。
中博俊
ベテラン
会議室デビュー日: 2004/10/17
投稿数: 91
お住まい・勤務地: 大阪市
投稿日時: 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
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-02-24 14:04
引用:

アセンブリ"Jp.Co.Company.Mag.Fw.BaseModule.Library"の"LibraryBase"というクラスを継承させています。("LibraryBase"には便利なメソッドをいくつも入れています。)



静的なクラスに "機能単位" で集約させるべきではないでしょうか?
宜しかったら、継承させる "理由" を教えて頂けませんでしょうか?
_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
kanai
ベテラン
会議室デビュー日: 2004/09/13
投稿数: 98
投稿日時: 2005-02-24 14:09
LibraryBaseとBatchEXEが「汎化」関係にあるかどうかが
継承にするかどうかの判断の基準です。

単なるユーティリティであれば、普通に呼んで使うだけです。
継承にするメリットはありません。

制限事項としては、「多重継承不可」があげられます。
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-02-24 14:46
引用:

("LibraryBase"には便利なメソッドをいくつも入れています。)


便利であるから抽象クラスでどさっとメソッドを持ちました、というのは説得力がありません。kanaiさんの書き込みのように、まずは、汎化・特化関係かどうかが大事です。
それで問題なく、そのメソッドが汎化クラスにあるのに違和感がないならよいのではないでしょうか。違和感があるならメソッドの移動をしましょう。

引用:

技術的にやってはいけないことか気になりまして。。。


コードが動くかどうか、というレベルでしたら動くでしょう。
しかし、よいコードになっているかどうか、でしたら、よいほうではない可能性があります。

_________________
たつごろー
codeseek
こみゅぷらす
あき
ベテラン
会議室デビュー日: 2003/07/23
投稿数: 72
投稿日時: 2005-02-24 15:30
返信ありがとうございます。

LibraryBaseには、トランザクション管理メソッド・データセット・アレイリスト・XMLの変換メソッドが入っていました。
BatchEXEはこれを利用しているだけでしたので、継承する必要はありませんね。標準化や共通化をするあまり、継承の基本である「汎化関係」を忘れてしまいました。オブジェクト指向設計モデルは、慣れるまで時間がかかりそうです。。。
作法として、「継承は最終手段」や「多重継承不可」を念頭におきたいと思います。

中博俊さん,じゃんぬねっとさん,kanaiさん,たつごろーさん
ご意見ありがとうございました。


[ メッセージ編集済み 編集者: あき 編集日時 2005-02-24 15:33 ]
1

スキルアップ/キャリアアップ(JOB@IT)