Я работаю над модулем преобразования единиц. Я нашел здесь несколько хороших идей, а также на CodeProject. Мой код очень похож на этот код C # на http://www.codeproject.com/KB/cs/Unit_Conversion_Sample.aspx Из следующего вы, вероятно, поймете, что я новичок в программировании :)
Я создал базовый класс Units, который унаследовал для создания каждого типа модуля.
Public Class Units
Private _unitvalue As Double
Private _unittype As [Enum]
Public Sub New(UnitValue As Double, UnitType As [Enum])
_unitvalue = UnitValue
_unittype = UnitType
End Sub
Public Property UnitValue() As Double
Get
Return _unitvalue
End Get
Set(value As Double)
_unitvalue = value
End Set
End Property
Public Property UnitType() As [Enum]
Get
Return _unittype
End Get
Set(value As [Enum])
_unittype = value
End Set
End Property
Public Overrides Function ToString() As String
Return String.Format("{0} {1}", UnitValue.ToString(), UnitType.ToString())
End Function
End Class
Затем я наследую этот класс, чтобы начать создавать единицы с включенной функцией преобразования единиц.
Public Class WeightUnit
Inherits Units
Enum WeightSym
'Pounds
Lbs
'Kilograms
Kg
End Enum
Sub New(UnitValue As Double, UnitType As WeightSym)
MyBase.New(UnitValue, UnitType)
End Sub
Public Function Convert(toUnit As WeightSym) As WeightUnit
'Base Weight Unit is Lbs
Dim fromUnit As WeightSym
fromUnit = UnitType
Dim Lbs As Double = 0
Select Case fromUnit
'Standard
Case WeightSym.Lbs
Lbs = UnitValue
Case WeightSym.Kg
Lbs = UnitValue * 2.2046226
End Select
Dim toVal As Double = 0
'to unit based on Lbs
Select Case toUnit
'Standard
Case WeightSym.Lbs
toVal = Lbs
Case WeightSym.Kg
toVal = Lbs * 0.4535924
End Select
Return New WeightUnit(toVal, toUnit)
End Function
End Class
Мне нужно создать несколько различных типов единиц, таких как длина, давление и т. Д. Это работает хорошо, за исключением одной проблемы. Я хотел бы иметь возможность изменять UnitType и автоматически обновлять UnitValue. Таким образом, если объект Unit имеет значение 1 и тип Inch, а тип изменяется на Cm, значение будет обновлено до 2,54.
Что-то вроде этого .... Я видел примеры этого, но разница здесь в том, что я не могу указать функцию Covert в моем базовом классе, потому что она изменяется с каждым новым созданным мной UnitClass.
Public Property UnitType() As [Enum]
Get
Return _unittype
End Get
Set(value As [Enum])
_unittype = value
_unitvalue = Convert(value).UnitValue
End Set
End Property
Я попытался сделать свойство UnitType Overridable и создать новое свойство Override для UnitType в каждом созданном мной UnitClass, но мне не удалось заставить это работать.
Любые предложения очень ценятся. Большое спасибо!