前置きですが、Parentプロパティを持たなくても、必要なことが実現できるのであれば、
できれば持たない方がいいですよ。Parentプロパティを整合性を持って管理されるように
実装するのって結構大変なんで。
> netでの独学なので、不安なのですが
> このような記述は一般的な表現方法なのでしょうか
方向性としては間違っていないと思います。
細かいところまで見ると修正すべき点はいろいろありますので、ツッコミ入れますね。
> Public Class TestNode
> Public 親 As TestNode
せっかくプロパティを用意しているのでPublicではなくPrivate辺りが妥当ではないでしょうか。
> Dim Nodes As List(Of TestNode)
Dimキーワードよりもこの場合であればPrivateキーワードを使う方がいいと思います。
クラスの変数としてDimを指定した場合は意味としてはPrivateですので動作上は問題ありませんが、
Privateだと明示する表現の方が好ましいです。
> Public Sub add(ByVal value As TestNode)
> Nodes.Add(value)
> value.set親(Me)
> End Sub
addではなくAddメソッドとしてください。クラスライブラリのメソッドもそうなってますよね。
また、ここではAddメソッドを実装していますが、
Removeメソッド/Insertメソッド/NodesをClearするようなメソッドが必要になった場合も
親の設定が必要になりますので注意が必要です。
> Public Sub set親(ByVal value As TestNode)
> Me.親 = value
> End Sub
親の設定は外部から勝手に変更されると困るのでPublicではなくPrivateにした方がよいでしょう。
> Public ReadOnly Property Parent()
> Get
> Return 親
> End Get
> End Property
> End Class
Parentプロパティの戻り値型の指定が漏れています。As TestNodeを付加しましょう。
また、ジェネリックスが使えるバージョンのVBなら、
プロパティのGetとSetでそれぞれ別のスコープを用意することができます。
set親メソッドを廃止して、以下のようにすれば外部からはParentプロパティは参照のみ、
クラス内部ではセットも可能というふうに記述できます。
Public Property Parent() As TestNode
Get
Return 親
End Get
Private Set(ByVal value As TestNode)
親= value
End Set
End Property