タイトル | : 1つの変数で複数クラスを引き受ける |
記事No | : 1959 |
投稿日 | : 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つの変数で受けたいと思っています。 どうしたらすっきりできるのでしょうか? それともそもそもこういうやり方をしようとすること自体間違っているのでしょうか?
|