私は基本クラスBase
とSorter
それParser
から派生したクラスを持っています。BaseResult
派生SorterResult
した とと同じことですParserResult
。
タイプBase
のResult
フィールドがあります。フィールドがあります。クラスを使用した理由は、との両方がログを書き込む必要があるためです。これが私のコードです:BaseResult
BaseResult
Log
Base
Parser
Sorter
Public MustInherit Class Base
Public Result As BaseResult
Event LogChanged()
Protected Sub AddLogLine(ByVal _logString As String)
If Not String.IsNullOrWhiteSpace(_logString) Then Result.Log.Add(_logString)
RaiseEvent LogChanged()
End Sub
End Class
Public Class Sorter
Inherits Base
Public Shadows Result As SorterResult
Sub New()
Result = New SorterResult With {.Log = New List(Of String)}
End Sub
Sub Go()
AddLogLine("Sorter started")
End Sub
End Class
Public Class Parser
Inherits Base
Public Shadows Result As ParserResult
Sub New()
Result = New ParserResult With {.Log = New List(Of String)}
End Sub
Sub Go()
AddLogLine("Sorter started")
End Sub
End Class
Public MustInherit Class BaseResult
Public Log As List(Of String)
End Class
Public Class SorterResult
Inherits BaseResult
'//SorterResult fields
End Class
Public Class ParserResult
Inherits BaseResult
'//ParsedResult fields
End Class
ここでの問題は、コンパイラがサイスであることです(下の写真):
「変数 'Result' は、基本クラス 'Base' の変数 'Result' と競合するため、'Shadows' と宣言する必要があります。」 Shadows キーワードを使用すると、警告は消えましたが、Result
フィールドがNothing
:
If Not String.IsNullOrWhiteSpace(_logString) Then Result.Log.Add(_logString)
クラスコンストラクターのResult
変数に値を割り当てることはできません。これは、 inおよびinの型である必要があるためです。ここで通常のパターンは何ですか?私の悪い英語を申し訳ありません。Base
SorterResult
Sorter
ParserResult
Parser