Implementing a cell class that has a value property that can be different types
I am trying to design a table type structure that contains rows and cells. I intend the cell class to have a value property. I'm trying to work out how I can create a value that can return some defined different types e.g integer, single, date, string. I'd like the cell value to be strongly typed, but I am unsure how best to get this working.
My thinking in code so far:
Public Class Cell
Private _value as object
Public Property Value as Object // How can I define this so that it return a Type
Get // e.g. integer, string, etc
Return _value
End Get
Set(ByVal value as object)
_value = value
End Set
End Class
Public Class Row
Dim _Cells as New List(Of Cell)
Public Function AddCell(ByVal c as Cell) as Cell
_Cells.Add(c)
Return _Ce开发者_Python百科lls(_Cells.count - 1)
End Function
Here a simple solution using basic inheritance and even without generics. The idea is that you have a single parent class for all cells. And a different cell class per column type. This make possible to declare list of cells in a Row object. Because of there may be different cell types within a single row, you can't declare it (list of cells) as a list of some specific cell type. But you can use cell's parent class in this case. In short here is example:
Public Class Cell
End Class
Public Class Cell_Id
Inherits Cell
Public Value As Integer
End Class
Public Class Cell_Name
Inherits Cell
Public Value As String
End Class
Public Class Cell_MonthlyTax
Inherits Cell
Public Value As Double
End Class
Public Class Row
Public Cells As New List(Of Cell)
Public Sub AddCell(ByVal cell As Cell)
Cells.Add(cell)
End Sub
End Class
Module Module1
Sub Main()
Dim row1 As New Row()
row1.AddCell(New Cell_Id() With {.Value = 1})
row1.AddCell(New Cell_Name() With {.Value = "Name1"})
row1.AddCell(New Cell_MonthlyTax() With {.Value = 12.2})
Dim row2 As New Row()
row2.AddCell(New Cell_Id() With {.Value = 2})
row2.AddCell(New Cell_Name() With {.Value = "Name2"})
row2.AddCell(New Cell_MonthlyTax() With {.Value = 47.9})
Dim row3 As New Row()
row3.AddCell(New Cell_Id() With {.Value = 3})
row3.AddCell(New Cell_Name() With {.Value = "Name3"})
row3.AddCell(New Cell_MonthlyTax() With {.Value = 73.3})
Dim rows As New List(Of Row)(New Row() {row1, row2, row3})
' here you loop through rows, in each row select Cell at index 2, cast it down to a specific
' type (yes, you should tell to a compiler that you sure that Cell at index 2 is of Cell_MonthlyTax type)
' After casting you will get intellisence and see that Value is of Double type.
' In cellsOfColumn2 you will get an array of Double (this is not exactly array, but it doesn't matter in our case)
Dim cellsOfColumn2 = From row In rows Select DirectCast(row.Cells(2), Cell_MonthlyTax).Value
' here you may work with array of values as you want, say calculate avarange value
Dim result = cellsOfColumn2.Average()
End Sub
End Module
精彩评论