型を変数で指定するには?

解決


せとやま  URL  2004-04-26 19:44:42  No: 83149  IP: [192.*.*.*]

通常クラスのインスタンスを作成する際の変数宣言は次の通り。
Dim XXX As クラス名(型)=New クラス名(型)

このクラス名(型)の部分を変数(String)にするにはどのようにしたらよいのでしょうか?

Type.GetType()メソッドを使ってもうまくいきません。

どなたかご教授ください。
よろしくお願いします。

編集 削除
魔界の仮面弁士  2004-04-27 01:55:12  No: 83150  IP: [192.*.*.*]

Public Class Form1
    Inherits System.Windows.Forms.Form

'<Windows フォーム デザイナで生成されたコード>

    Private Class Person
    End Class

    Private Sub Button1_Click(ByVal sender As [Object], ByVal e As System.EventArgs) Handles Button1.Click
        Dim foo As Object = System.Type.GetType("WinForm.Form1+Person").GetConstructor(New System.Type() {}).Invoke(Nothing)
        MessageBox.Show(foo.ToString())
    End Sub
End Class

編集 削除
魔界の仮面弁士  2004-04-27 02:10:51  No: 83151  IP: [192.*.*.*]

上記で、"WinForm.Form1+Person"という表記がありますが、この部分は
「実際のクラス名を表す文字列」に修正してください。


私の場合は、プロジェクト名を「WinForm」という名前にしていた関係で、
デフォルトのルート名前空間も「WinForm」になっており、結果として
Form1内のPersonクラスを表す型名が、"WinForm.Form1+Person" となった次第です。

例えば、もしもルート名前空間が「WindowsApplication1」であったなら、
"WindowsApplication1.Form1+Person"を指定する事になるでしょうし、
PersonクラスがForm1の外側でPublic宣言されていれば、
"WindowsApplication1.Person"のように記述する事になるでしょう。

あるいは、完全限定名を使って、
"WindowsApplication1.Form1+Person, WindowsApplication1, Version=1.0.1578.3519, Culture=neutral, PublicKeyToken=null"
のような記述を使ってもOKです。

編集 削除
せとやま  2004-04-27 10:13:06  No: 83152  IP: [192.*.*.*]

完璧なご回答ありがとうございました。
高度なやり方で私には全く思いつきません。
今回はじめて質問させていただきました。
以前より、調べ物をしている際、魔界の仮面弁士さんの回答を目にしておりました。どの回答も的確で、私自身もとても助かっておりました。
これからもよろしくお願いします。

編集 削除