DOBON.NET DOBON.NETプログラミング掲示板過去ログ

継承フォームについて

環境/言語:[環境(WindowsXP)、使用言語(VB.NET)]
分類:[.NET]

いつもお世話になっています。

継承についての質問なのですが、

例えば、Sub NewとSub New(ByVal 〜)という二つのコンストラクタをもつ
基本フォームを継承してAフォームとBフォームを作成します。そして
AフォームからBフォームを呼び出すのですが、Bフォームのインスタンス化時には
基本フォームのSub New(ByVal 〜)を走らせたいのですが、Sub Newしか走りません。明示的にSub New(ByVal 〜)を走らすことは可能なのでしょうか?

わかり難くてすみませんが、どなたか解かる方よろしくお願いします。m(_ _)m
2004/08/17(Tue) 14:19:00 編集(投稿者)

こんにちわ、Rockunさん。

■No5601に返信(Rockunさんの記事)
> いつもお世話になっています。
>
> 継承についての質問なのですが、
>
> 例えば、Sub NewとSub New(ByVal 〜)という二つのコンストラクタをもつ
> 基本フォームを継承してAフォームとBフォームを作成します。そして
> AフォームからBフォームを呼び出すのですが、Bフォームのインスタンス化時には
> 基本フォームのSub New(ByVal 〜)を走らせたいのですが、Sub Newしか走りません。明示的にSub New(ByVal 〜)を走らすことは可能なのでしょうか?
>
> わかり難くてすみませんが、どなたか解かる方よろしくお願いします。m(_ _)m

「明示的に」の意味合いはわかりかねますが、
インスタンス化する時(Newする時)に、その Sub New(ByVal〜)に合致する形でやれば、できるはずです。
(オーバーロードの解決の概念です)

[A]・・・Public Sub New()
[B]・・・Public Sub New(ByVal iOption As Integer)

というコンストラクタがあった時

Dim pClassA As New frmA   ' /* Aのコンストラクタで実行 */
Dim pClassB As New frmB(1) ' /* Bのコンストラクタで実行 */

ですので、

> 継承についての質問なのですが、

継承は関係ないのではないかと思うのですが、
MyBase.New()が含まれるコンストラクタは文字通り、
継承元クラスのコンストラクタを呼び出すことに注意してください。

  Public Sub New(ByVal iOption As Integer)
    MyBase.New()  ' ←ここで、継承元のコンストラクタを呼び出している

    ' /* 〜 中略 〜 */
End Sub

# まあ、frmAから、frmBを呼び出しているのならばあんまり関係ないのかな。
  • 題名: Re[1]: 継承フォームについて
  • 著者: よねKEN
  • 日時: 2004/08/17 14:19:47
  • ID: 5604
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
> 基本フォームのSub New(ByVal 〜)を走らせたいのですが、Sub Newしか走りません。
> 明示的にSub New(ByVal 〜)を走らすことは可能なのでしょうか?

たぶん的外れなコメントだと思いますが、
もしデザイン時にSub New(ByVal 〜)の方を走らせたい、
という意味であれば、それはできないと思います。
■No5602に返信(java.lang.Nullpoさんの記事)
> 2004/08/17(Tue) 14:06:39 編集(投稿者)

> 「明示的に」の意味合いはわかりかねますが、
> インスタンス化する時(Newする時)に、その Sub New(ByVal〜)に合致する形でやれば、できるはずですが?
> (オーバーロードの解決の概念です)
>
> [A]・・・Public Sub New()
> [B]・・・Public Sub New(ByVal iOption As Integer)
>
> というコンストラクタがあった時
>
> Dim pClassA As New ClassHoge   ' /* Aのコンストラクタで実行 */
> Dim pClassB As New ClassHoge(1) ' /* Bのコンストラクタで実行 */
>
> ですので、
>
>>継承についての質問なのですが、
>
> 継承は関係ないのではないかと思うのですが :)

レスありがとうございます。

やっぱり解かり難かったですね(;_;)

上記の場合だとClassHogeというクラスを違うコンストラクタで
インスタンス化してますが、そうではなくて
ClassHogeを継承しているClsHogeAをインスタンス化時にClassHogeにある
Public Sub New(ByVal iOption As Integer)を走るようにしたいのです。
デバックで追っていくとClsHogeAをインスタンス化するとClassHogeでは
Public Sub New()が走るので・・・。

うう、やっぱり伝わりにくいですね(;_;)

基本フォームを継承したAフォームにコンストラクタを追加すればいいのですが、
同じ処理を幾つかの同様なフォームにさせたいので、
基本フォーム側に処理をまとめることが出来ればと思ったのですが・・・。
■No5605に返信(Rockunさんの記事)
> デバックで追っていくとClsHogeAをインスタンス化するとClassHogeでは
> Public Sub New()が走るので・・・。

ClsHogeA -> 派生クラス
ClassHoge -> Baseクラス

とした時に、ClsHogeAインスタンス化時に、
ClassHogeのSub New()が走る?

MyBase.New() → MyBase.New(1)にしても?

# ■No.5602は修正して補足してありますけど。
# もしかして、まだ私が勘違いしている?
■No5607に返信(java.lang.Nullpoさんの記事)

> # ■No.5602は修正して補足してありますけど。
> # もしかして、まだ私が勘違いしている?

レスありがとうございます!

補足の部分を読んでませんでしたm(_ _)m
無事解決しました。ありがとうございました!
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板