私は以下で遊んでいます:
Public MustInherit Class TempTable
Public Sub New()
For Each f As FieldInfo In Me.GetType().GetFields
Dim l As TypedLeaf = CType(f.GetValue(Me), TypedLeaf)
Console.WriteLine(l.Name)
Next
End Sub
End Class
Public Class JMTempTable
Inherits TempTable
Public KeyIndex As New TypedLeaf(Me, "KeyIndex", OQL.Type.AUTONUMBER)
Public Debit As New TypedLeaf(Me, "Debit", OQL.Type.DECIMAL(16, 2))
Public Sub New()
MyBase.New()
End Sub
End Class
しかし、取得した値に対して何も取得しません。その理由は、派生クラスのフィールドは、基本クラスのコンストラクターが呼び出されるまで初期化されないためと思われます...さらに複雑なことに、次のようにします。
Public Class JMTempTable
Inherits TempTable
Public KeyIndex As TypedLeaf
Public Debit As TypedLeaf
Public Sub New()
KeyIndex = New TypedLeaf(Me, "KeyIndex", OQL.Type.AUTONUMBER)
Debit = New TypedLeaf(Me, "Debit", OQL.Type.DECIMAL(16, 2))
MyBase.New()
End Sub
End Class
コンパイラは、派生クラスのコンストラクタの最初の行で基本クラスのコンストラクタを呼び出す必要があると文句を言います。
派生クラスのフィールドが初期化されるまで、基本クラスのコンストラクターの実行を遅らせる方法はありますか?