投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/8/31 17:50:16
たとえば、ツールボックスから TextBox をフォームに貼って使いますよね。

通常は Visual Studio がコードを自動生成してくれますが、これはつまり、
 Private textBox1 As TextBox
という変数に対して
 textBox1 = New TextBox()
のようにインスタンスを生成して、それをフォーム上に
 Form1.Controls.Add(textBox1)
のようにして載せて使う…という処理を意味します。

Form1 に貼った textBox1 と、Form2 に貼った textBox1 は、
機能的には全く一緒です(TextBox クラスとしての振る舞い)。

それぞれ個別に New されているため、実態(インスタンス)は別物となります。
別の TextBox として管理されているので、それぞれの別の文字列を管理できます。

「As TextBox」のところは TextBox クラスの変数定義。
「New TextBox()」のところは、TextBox クラスのインスタンスを生成している箇所。

…という説明で伝わりますかね?


一つのインスタンスを複数の変数から参照することもできます。
 Dim textBox3 As TextBox = textBox1
 textBox3.Text = "ABC"
のようにすると、textBox3 と textBox1 はいずれも同じインスタンスを差しているので、
textBox3.Text を書き換えると、textBox1 の Text も書き換わります。


上記は画面上に貼る Control についての解説ですが、
その他のクラスについても同じことが言えます。

Dim yamada As Person  'Person クラスの変数「山田」を定義 
yamada = New Person()   '「山田」変数に Person クラスのインスタンスをセット 

'上記 2 行を、下記のように 1 行で書くこともできる 
'Dim yamada As Person = New Person() 
'Dim yamada As New Person() 
'Dim yamada = New Person()