기본 클래스 인 BaseParser에서 상속 한 두 가지 파서 클래스가 있습니다. 두 클래스 중 하나를 다른 Monitor 클래스의 매개 변수로 사용하려고합니다. Parser 클래스 인 CS600과 TCH600에는 RawDataList와 SummaryDataList의 두 가지 속성이 있습니다. CS600 클래스의 RawDataList는 (CS600Data의) List를 반환합니다. TCH600 RawDataList는 TCH600Data의 List를 리턴합니다. SummaryDataList는 각 Parser 클래스에서 유사한 클래스를 반환합니다. CS600Data 및 TCH600Data는 기본 클래스 BaseData에서 파생됩니다. BaseParser에는 또한 RawDataList (BaseData의 List) 및 SummaryDataList (BaseSummaryData의 List)가 있습니다.다른 반환 형식으로 다형성으로 자식 클래스 사용
Monitor 클래스에는 위의 두 가지 구체적인 구문 분석기 중 하나 인 _thisParser가있는 개인 필드가 있습니다. Monitor 클래스 내에서 _thisParser의 RawDataList 및 SummaryDataList를 호출하고 사용할 수 있기를 원하지만 구체적인 파서 클래스를 구성 할 때 Visual Studio에서는 CS600의 RawDataList 속성이 반환 값이 다르므로 BaseParser의 RawDataList 속성을 재정의 할 수 없다고 기록합니다 유형.
CS600Data BaseData에서 파생 된 이후 (뿐만 아니라 자체의 일부 새 속성을 추가합니다) 내가 CS600Data BaseData 사용할 때 사용할 수 있다고 생각. 내가 오해하니? 이 클래스들을 어떻게 올바르게 만들 수 있습니까?
Public MustInherit Class BaseParser
Protected _rawDataList As List(Of RawGasData.BaseData)
Public MustOverride ReadOnly Property RawDataList() As List(Of RawGasData.BaseData)
Protected _summaryDataList As List(Of SummaryGasData.BaseSummaryData)
Public MustOverride ReadOnly Property SummaryDataList() As List(Of SummaryGasData.BaseSummaryData)
Public Event GasDataCreated(ByVal sender As Object, ByVal e As EventArgs)
Public Sub New()
End Sub
Public Sub New(ByVal dataFilePath As String, ByVal unit As String)
Load(dataFilePath, unit)
End Sub
Public Sub Load(ByVal dataFilePath As String, ByVal unit As String)
Dim contents = My.Computer.FileSystem.ReadAllText(dataFilePath)
ParseRawData(contents)
GenerateSummaryData(contents, unit)
RaiseEvent GasDataCreated(Me, EventArgs.Empty)
End Sub
Protected MustOverride Sub ParseRawData(ByVal fileContents As String)
Protected MustOverride Sub GenerateSummaryData(ByVal fileContents As String, ByVal unit As String)
End Class
Public Class CS600Parser
Inherits BaseParser
Shadows _rawDataList As List(Of RawGasData.CS600Data)
'Cannot override base class' RawDataList - differ by their return types
Public Overrides ReadOnly Property RawDataList() As List(Of RawGasData.CS600Data)
Get
Return _rawDataList
End Get
End Property
Shadows _summaryDataList As List(Of SummaryGasData.CS600SummaryData)
'Cannot override base class' SummaryDataList - differ by their return types
Public Overrides ReadOnly Property SummaryDataList() As List(Of SummaryGasData.CS600SummaryData)
Get
Return _summaryDataList
End Get
End Property
Protected Overrides Sub ParseRawData(ByVal fileContents As String)
Dim data = From d In fileContents.Trim.Split(CChar(vbCrLf)) _
Let fields = d.Split(","c).Select(Function(s) s.Trim) _
Select New RawGasData.CS600Data With { _
.SampleNumber = fields(0), _
.UserID = fields(1), _
.CarbonValue = CDbl(fields(2)), _
.SulfurValue = CDbl(fields(3))}
_rawDataList = data.ToList
End Sub
Protected Overrides Sub GenerateSummaryData(ByVal fileContents As String, ByVal unit As String)
Dim groupedData = From d In _rawDataList _
Group By d.SampleNumber Into Group _
Select New SummaryGasData.CS600SummaryData With { _
.DataTimeStamp = Now, _
.SampleNumber = SampleNumber, _
.UserID = Group.First.UserID, _
.CarbonAverage = Group.Select(Function(s) s.CarbonValue).Average, _
.CarbonUnit = unit, _
.SulfurAverage = Group.Select(Function(s) s.SulfurValue).Average, _
.SulfurUnit = unit}
_summaryDataList = groupedData.ToList
End Sub
End Class
Public Class TCHParser
Inherits BaseParser
Shadows _rawDataList As List(Of RawGasData.TCH600Data)
'Cannot override base class' RawDataList - differ by their return types
Public Overrides ReadOnly Property RawDataList() As List(Of RawGasData.TCH600Data)
Get
Return _rawDataList
End Get
End Property
Shadows _summaryDataList As List(Of SummaryGasData.TCH600SummaryData)
'Cannot override base class' SummaryDataList - differ by their return types
Public Overrides ReadOnly Property SummaryDataList() As List(Of SummaryGasData.TCH600SummaryData)
Get
Return _summaryDataList
End Get
End Property
Protected Overrides Sub ParseRawData(ByVal fileContents As String)
Dim data = From d In fileContents.Trim.Split(CChar(vbCrLf)) _
Let fields = d.Split(","c).Select(Function(s) s.Trim) _
Select New RawGasData.TCH600Data With { _
.SampleNumber = fields(0), _
.UserID = fields(1), _
.OxygenValue = CDbl(fields(2)), _
.NitrogenValue = CDbl(fields(3)), _
.HydrogenValue = CDbl(fields(4)), _
.MassUsed = CDbl(fields(5))}
_rawDataList = data.ToList
End Sub
Protected Overrides Sub GenerateSummaryData(ByVal fileContents As String, ByVal unit As String)
Dim groupedData = From d In _rawDataList _
Group By d.SampleNumber Into Group _
Select New SummaryGasData.TCH600SummaryData With { _
.DataTimeStamp = Now, _
.SampleNumber = SampleNumber, _
.UserID = Group.First.UserID, _
.OxygenAverage = Group.Select(Function(s) s.OxygenValue).Average, _
.OxygenUnit = unit, _
.NitrogenAverage = Group.Select(Function(s) s.NitrogenValue).Average, _
.NitrogenUnit = unit, _
.HydrogenAverage = Group.Select(Function(s) s.HydrogenValue).Average, _
.HydrogenUnit = unit}
_summaryDataList = groupedData.ToList
End Sub
End Class
Public MustInherit Class BaseData
Implements IGasData
Private _massUsed As Double
Public Property MassUsed() As Double Implements IGasData.MassUsed
Get
Return _massUsed
End Get
Set(ByVal value As Double)
_massUsed = value
End Set
End Property
Private _sampleNumber As String
Public Property SampleNumber() As String Implements IGasData.SampleNumber
Get
Return _sampleNumber
End Get
Set(ByVal value As String)
_sampleNumber = value
End Set
End Property
Private _userID As String
Public Property UserID() As String Implements IGasData.UserID
Get
Return _userID
End Get
Set(ByVal value As String)
_userID = value
End Set
End Property
End Class
Public Class CS600Data
Inherits BaseData
Private _carbonValue As Double
Public Property CarbonValue() As Double
Get
Return _carbonValue
End Get
Set(ByVal value As Double)
_carbonValue = value
End Set
End Property
Private _sulfurValue As Double
Public Property SulfurValue() As Double
Get
Return _sulfurValue
End Get
Set(ByVal value As Double)
_sulfurValue = value
End Set
End Property
End Class
Public Class TCH600Data
Inherits BaseData
Private _oxygenValue As Double
Public Property OxygenValue() As Double
Get
Return _oxygenValue
End Get
Set(ByVal value As Double)
_oxygenValue = value
End Set
End Property
Private _nitrogenValue As Double
Public Property NitrogenValue() As Double
Get
Return _nitrogenValue
End Get
Set(ByVal value As Double)
_nitrogenValue = value
End Set
End Property
Private _hydrogenValue As Double
Public Property HydrogenValue() As Double
Get
Return _hydrogenValue
End Get
Set(ByVal value As Double)
_hydrogenValue = value
End Set
End Property
End Class
질문에 실제로 VS를 다루지 않는 한 'visual-studio'가 아닌 적절한 언어 (VB?)로 질문에 태그를 지정해야합니다. 또한 수업 코드를 게시하고 질문이있는 곳의 지역을 지적해야합니다. –
고마워, @KendallFrey; 내가 추천 한 내용을 변경했습니다. – blueshift