- - PR -
プロジェクトが異なるFormの継承方法について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-01-15 10:34
いつもお世話になっております。
ProjectAで作成したFormクラスのformA(基本クラス)を別のプロジェクトであるProjectBで継承したクラスformB(継承クラス)を 作成したいと考えています。 この場合継承先であるProjectBに継承元であるProjectAへの参照の追加を行わなければならないと思うのですが、 ProjectA.exeを追加しようとすると、dll形式のファイルしか追加出来ないと言ったようなメッセージが表示されます。 ProjectAをクラスライブラリ形式でリビルドしたProjectA.dllであれば参照に追加する事が出来て formAの継承も上手くいくのですが、この方法以外に別プロジェクトのformAをformBに継承する方法はないのでしょうか? 一般的なプロジェクト開発ではみなさんはこういった場合どのようにしているのでしょうか? ご存知の方おられましたらご回答をお願いいたします。 | ||||
|
投稿日時: 2004-01-15 11:00
formAを含むdllを作って、ProjectAとProjectB両方から参照するというのはどうでしょう。
formAをProjectAでもProjectBでも参照するということは、formAは「ProjectA独自のもの」ではないわけですから、別にクラスライブラリとするのが良いと思います。 でも、本当に継承するのが良いのかどうか考えた方がいいですよ。 「昔ProjectAで作ったformAの機能と似たようなのをProjectBでも必要になった」 という理由なら、コピペの方がまだましです。 初めからライブラリとして全体像を考えて作られたクラス群というなら別ですが、そうでないなら、「オブジェクト指向プログラミングは再利用性が高い差分プログラミング」なんていうのを信じてプログラムを書くとヒドイ目にあいます。 | ||||
|
投稿日時: 2004-01-15 11:51
基本的に賛成。 FormAを直接継承するのではなく、FormAとFormBに不変で完全に共通な部分だけを抜き出したFormParentを作り、そこからFormAとFormBに継承する。というのが、オブジェクト指向の継承の使い方です。「不変で完全に共通」というのがミソ。「不変で完全に共通」からの差分であって、「似た機能」からの差分ではない。 あと、ソリューションを同じにして(ProjectA用のソリューションがあってそれにProjectBを追加したくないなら、ProjectB用のソリューションにProjectAを追加)、参照の追加で「プロジェクト」タグを選べば、追加できると思いますけど? | ||||
|
投稿日時: 2004-01-15 11:53
一郎さんご回答ありがとうございます。
少し自分の説明が不足していたので付け加えさせてください。 例えばマスタメンテ系の画面を複数作成するとして、 上で書いたformA(継承元)には全てのマスタメンテ系の画面で共通に使用する処理が書かれています。 formB(継承先)には個別のマスタメンテ画面(例えば会社マスタメンテ画面)固有の処理が書かれています。 formBと同様に、ProjectCのformC(社員マスタメンテ画面)、ProjectDのformD(役職マスタメンテ画面)、、、、というように formAを継承した個別のマスタメンテ画面がformB以下複数ある、というような構成になっています。 そもそも、「参照の追加」を行う事が出来るのはやはりdll形式のファイルだけなのでしょうか? ご回答をお願いいたします。 | ||||
|
投稿日時: 2004-01-15 11:55
ProjectA.exeの拡張子をdllに変更して、参照追加してはいかがでしょうか? | ||||
|
投稿日時: 2004-01-15 12:03
Jittaさんご回答ありがとうございます。
こちらの方法と同様の方法を以前試してみたのですが、ProjectAをexe形式にしたままでは 参照の追加が出来ませんでした。dll形式では出来ましたが。 やはりdll形式にするしかないのでしょうか? もしexe形式のままでの参照の追加、若しくは参照の追加以外の方法で別プロジェクトからの継承を行う方法があれば教えてください。 | ||||
|
投稿日時: 2004-01-15 12:07
iStationさんご回答ありがとうございます。
はい、現在は正にその通りの方法で開発を行っております。 ただ、まだ開発が始まったばかりで後戻りが効く時期なので他にいい方法があればと思い質問させて 頂きました。 | ||||
|
投稿日時: 2004-01-15 12:12
何も「参照」しなくても、「継承したフォームの追加」でできますね。でも、DLL形式からだけ、ですが。
疑問なのが、共通した処理を集めたフォームが、それだけでアプリケーションとして成り立っているのでしょうか。もしくは、アプリケーションとして提供できるのでしょうか。 |