投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/9/1 10:59:23
例えばですよ、「名簿」クラスを作るとするじゃないですか。

その名簿の各ページには、
  姓 As String
  名 As Date
な 2 つのメンバーがあるとしましょう。


名簿を管理するにあたって、3年A組の名簿 と 3年B組の名簿は、
別々に発行したいと思います。なので別のインスタンスとして、
個別に New で実体化させます。

Dim a As New 名簿("3年A組")
a.Add("茅野""さくら")
a.Add("逢沢""博己")
a.Add("秋庭""凛")

Dim b As New 名簿("3年B組")
b.Add("浅井""雪乃")
b.Add("宮沢""保")
b.Add("阿部""トシエ")

Dim c As 名簿



変数 a と b には、それぞれ、固有の名簿インスタンスが割り当てられました。
しかし c はまだ変数が定義されただけで、実体化されていません。


クラスというのは「雛形」や「設計図」に当たります。
New でインスタンス化しなければ、操作可能な実体にはなりません。

実態化されていないうちに、c.Add でメソッドにアクセスしようとすると、
NullReferenceException のエラーになります。

c に実体を割り当てる際には、c = New 名簿("3年C組") のように、
新しい名簿を発行することもできますし、あるいは既存の実体を
c = a のようにセットして、「a と同じインスタンスを参照した状態」にもできます。


また、設計図となる名簿クラスのページ定義に、
  生年月日 As Date?
が加えられたとしたら、変数 a~c いずれの変数に対しても、
 MsgBox( a(0).生年月日 )
などのように、生年月日というメンバーが追加されることになります。



Public Class 名簿
    Inherits List(Of 頁)
    Public Property 標題 As String
    Public Sub New(標題 As String)
        Me.標題 = 標題
    End Sub
    Public Overloads Sub Add(姓 As String, 名 As StringOptional 生年月日 As Date? = Nothing)
        Add(New 頁() With {.姓 = 姓, .名 = 名, .生年月日 = 生年月日})
    End Sub
    Public Class 頁
        Public Property 姓 As String
        Public Property 名 As String
        Public Property 生年月日 As Date?
    End Class
End Class