我有一个基类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
这里的问题是编译器sais(在下图中):
“变量‘Result’与基类‘Base’中的变量‘Result’冲突,应声明为‘Shadows’。” 当我使用 Shadows 关键字时,警告消失了,但我在这一行得到一个空引用异常,因为Result
字段是Nothing
:
If Not String.IsNullOrWhiteSpace(_logString) Then Result.Log.Add(_logString)
我无法Result
在类构造函数中为变量赋值Base
,因为它必须是SorterResult
inSorter
和ParserResult
in类型Parser
。这里的常规模式是什么?对不起我的英语不好。