tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 1つの変数で複数クラスを引き受ける
投稿日: 2005/08/05(Fri) 10:32
投稿者さくら
[OSのVer]:Windows    [VBのVer]:VB.NET  

親クラス BASE_Class
を継承した子クラスが
Property Prop_A を持っている Class_A
Property Prop_B を持っている Class_B
Property Prop_C を持っている Class_C
の3つあったとします。

フォームのボタンを押されたときにプログラム中の条件によって子クラスのうちどちらかをNewして操作したいと思います。
----------------------------------------
Private Sub get_class(ByRef target)
    If Me.RadioButton1.Checked Then
        target = New Class_A
    ElseIf Me.RadioButton2.Checked Then
        target = New Class_B
    Else
        target = New Class_C
    End If

    Return target
End Sub
----------------------------------------
として
----------------------------------------
Dim tmp As BASE_Class
get_class(tmp)
If Me.RadioButton1.Checked then
    tmp.Prop_A = ****
ElseIf Me.RadioButton2.Checked then
    tmp.Prop_B = ****
        :
----------------------------------------
などとしたいのですが、実際にはtmpに対してCTypeでキャストしてからでないと子クラス特有のプロパティを操作することができません。

そこで、tmpとは別に、get_classでNewされるオブジェクトを引き受ける変数をDimしておいて、型はget_classで作られた型を参照して
----------------------------------------
Dim tmp As BASE_Class
get_class(tmp)
Dim act As New tmp.TypeOf()
----------------------------------------
みたいなことをしようとしているのですが、これでは3行目が通りません。

候補となりうる子クラス分のDimだけ書いておいて、get_classで返ってきたtmpの型を見て必要なぶんの子クラスだけNewすればできたのですが、実際には子クラスもプロパティももっとたくさんあるので、できれば1つの変数で受けたいと思っています。
どうしたらすっきりできるのでしょうか?
それともそもそもこういうやり方をしようとすること自体間違っているのでしょうか?

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。