通常クラスのインスタンスを作成する際の変数宣言は次の通り。
Dim XXX As クラス名(型)=New クラス名(型)
このクラス名(型)の部分を変数(String)にするにはどのようにしたらよいのでしょうか?
Type.GetType()メソッドを使ってもうまくいきません。
どなたかご教授ください。
よろしくお願いします。
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
上記で、"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です。
完璧なご回答ありがとうございました。
高度なやり方で私には全く思いつきません。
今回はじめて質問させていただきました。
以前より、調べ物をしている際、魔界の仮面弁士さんの回答を目にしておりました。どの回答も的確で、私自身もとても助かっておりました。
これからもよろしくお願いします。