나는 기본 클래스 Base
과 Sorter
및 Parser
클래스를 파생 시켰습니다. BaseResult
과 동일한 것은 도출 된 SorterResult
과 ParserResult
입니다. Base
은 BaseResult
유형의 Result
필드를 가지며 BaseResult
필드는 Log
필드를 갖습니다. Base
클래스를 사용한 이유는 Parser
과 Sorter
모두 로그를 작성해야하기 때문입니다. 변수 '결과'에 VB.NET 상속 문제
"변수 '결과'충돌 기본 클래스 '자료'
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입니다 : 여기 내 코드입니다 'Shadows'라고 선언해야합니다. " 나는 그림자 키워드를 사용, 경고가 사라졌다,하지만 Result
필드 Nothing
때문에 나는이 라인에 null 참조 예외가 : 나는 Base
클래스 생성자에 Result
변수에 값을 할당 할 수 없습니다
If Not String.IsNullOrWhiteSpace(_logString) Then Result.Log.Add(_logString)
왜냐하면 Sorter
에 SorterResult
유형이고 에 ParserResult
유형이어야하기 때문입니다. 규칙적인 패턴은 무엇입니까? 미안하지만 내 나쁜 영어.
(http://msdn.microsoft.com : 어쩌면
당신도 하나의 글로벌 로거가 있어야합니다 /en-us/library/1h3wytf6.aspx) MyBase를 사용하여 지정할 수 있습니다. 하지만 당신의 접근 방식이 좋지 않다고 생각합니다. [이 링크] (http://msdn.microsoft.com/en-us/library/c4swkw24.aspx)는 '그림자'에 대해 자세히 설명합니다. – bansi
@bansi, 더 나은 접근 방식을 제안 할 수 있습니까?내 모든 패턴이 틀렸어? – AsValeO