- - PR -
Forms部品の継承 クラスとデザイナクラスの関係
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-02-23 13:39
Vb 2005 Express Editionを利用しています。
プロジェクトにWindowsフォームや、ユーザコントロールを追加とすると クラス(.vb)と、Partialクラス(.Designer.vb)ができますよね。 これらと継承の関係について質問です。 #以後、クラスとPartialクラスと記述します。 今回、ベースとなる親Formクラスを作り、 このクラスを継承してアプリケーションクラスを作成するという構造にしたいと考えています。 親Formクラスでは、属性や、関数、継承元で実装すべき関数(MustOverride)を定義します。 デザインは、継承クラスで自由に設定してほしいです。(共通の表示項目はない) プロジェクトにWindowsフォームを追加し、実装を行いました。 Public MustInherit Class ParentForm・・・End Class Partial Class ParentForm Inherits System.Windows.Forms.Form・・・End Class 質問1. クラスで、MustOverride関数を定義すると、 クラスをMustInheritにしなくてはいけないのはわかるのですが、 PartialクラスはMustInheritにするべきなのでしょうか? 作成した親Formクラスを継承してアプリケーションを実装するために、 プロジェクトにWindowsフォームを追加し、 アプリFormのクラスを親クラスを継承する(Inherits)するようにしたら、 エラーになりました。 Public Class AppForm Inherits ParentForm・・・End Class Partial Class AppForm・・・End Class <'AppForm' に指定された基本クラス 'ParentForm' は、その他の partial 型の 1 つである基本クラス 'System.Windows.Forms.Form' と異なることはできません。> 逆に、Partialクラスだけ親クラスを継承したらエラーは出ませんでした。 Public Class AppForm・・・End Class Partial Class AppForm Inherits ParentForm・・・End Class 質問2. クラスが親クラスを継承しなくてよいのはなぜでしょう? 質問3. アプリFormのデザイナを表示しようとしたら、エラーとなりました。 <デザイナは型 'ParentForm' のインスタンスを作成しなければなりませんが、 型が abstract として宣言されているため、作成できませんでした。 > アプリFormは、MustInheritではないのに、なぜ表示できないのでしょうか? このアプリFormを同じように継承してFormを作ると、そのデザイナはちゃんと表示されます。 親クラスがインスタンス化できないとデザイナは表示できないのですか? よろしくお願いします。 | ||||||||||||||||
|
投稿日時: 2007-02-23 13:59
これを読む限り、Partial クラスの意味を理解していないように思えます。 何だか、Partial クラスで分割したファイルを別々のクラスかのように勘違いをしていないでしょうか? この 2 つのファイル (Partial クラス) は同じ 'クラス' を示しています。
はい。 [ メッセージ編集済み 編集者: じゃんぬねっと 編集日時 2007-02-23 14:00 ] | ||||||||||||||||
|
投稿日時: 2007-02-23 14:46
不勉強ですみません。 1つのクラスを複数のファイルに分けて定義する場合にPartialを利用するのですね。 ソリューションエクスプローラの表示のされ方からは、(.Designer.vb)が(.vb)一部のような印象をうけますが、 (.vb)にMustOverride関数を定義したのに、 (.Designer.vb)にMustInheritを宣言しなくてはいけないということは、 (.vb)が(.Designer.vb)の一部なんでしょうか? 質問1、2の回答? (.Designer.vb)にMustInherit,Inheritsを宣言すれば、(.vb)に宣言は必要ない。 (.vb)にMustInherit,Inheritsを宣言した場合は、(.Designer.vb)に宣言が必要。 質問3の回答 親クラスがインスタンス化できないとデザイナは表示できない #不便ですね。なにかよい方法はないものでしょうか。 | ||||||||||||||||
|
投稿日時: 2007-02-23 15:47
いえ、MustInherit はどちらにでも修飾することが出来ますよ。
え? そんなことはないと思います。
abstract (MustInherit) クラスをやめない限りは無理だと思います。 2005 になって何か抜け道があるかもしれませんが、私はとりあえず知らないです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1