2 つのクラスがあり、一方は他方から継承されます。基本クラスは MustInherit/abstract で、MustOverride/abstract プロパティを定義します。
基本クラスの初期化の一部として、abstract プロパティの値に基づいて変数を設定します。問題は、オーバーライドされたプロパティに割り当てられるべき値を継承クラスがパラメータとして受け入れることです。継承されたクラスはこのプロパティを設定しますが、基本クラスの初期化子を呼び出す前ではありません。
基本的には、基本クラスの一部を初期化してから、継承クラスがそのプロパティの一部を初期化できるようにし、基本クラスに戻ってさらに多くのプロパティの初期化を完了する必要があります。
プロパティを基本クラスの一部にしますが、継承クラスは厳密な型指定を使用しますが、基本クラスはインターフェイスのみを必要とします。
コード例:
MustInherit Class A
MustOverride Property X As IExample
Sub New()
' Do some stuff
_privateY = X.Foo() ' NullReferenceException
End Sub
End Class
Class B
Inherits A
Override Property X As IExample ' returns StrongX
Property StrongX As ConcreteExample ' ConcreteExample implements IExample
Sub New(x As ConcreteExample)
MyBase.New(x)
StrongX = x
End Sub
End Class