我正在研究单位转换模块。我在这里找到了几个好主意,以及CodeProject。我的代码与http://www.codeproject.com/KB/cs/Unit_Conversion_Sample.aspx处的C#代码非常相似 从下面你可能会收集到我对编程很新的东西:)
我创建了一个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且类型为英寸,并且类型更改为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
我尝试使Property UnitType Overridable并在我创建的每个UnitClass中为UnitType创建一个新的Override属性,但是我无法使其工作。
非常感谢任何建议。 非常感谢!
答案 0 :(得分:0)
我正在回答我自己的问题,因为我找到了一种方法来完成更新UnitValue和UnitType,稍微重新排列我的代码。我将转换功能分成两部分。首先,我创建了一个只返回Double的WeightConversion函数。
Public Function WeightConversion(Quantity As Double,fromUnit As WeightSym,_
toUnit As WeightSym) As Double
'Base Weight Unit is Lbs
Dim fromUnit As WeightSym
fromUnit = UnitType
Dim Lbs As Double = 0
Select Case fromUnit
'Standard
Case WeightSym.Lbs
Lbs = Quantity
Case WeightSym.Kg
Lbs = Quantity * 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 toVal
End Function
然后,我创建了一个看起来像这样的函数......在我的实现中,我在我的基类中创建了一个可覆盖的函数,并用下面的方法覆盖它。
Public Function ToUnit(toType As LengthSym) As Boolean
'First Set UnitValue
Me.UnitValue = LengthConversion(Me.UnitValue, Me.UnitType, toType)
'Then Set the UnitType to the newly choosen unit
Me.UnitType = toType
Return True
End Function
这给了我正在寻找的效果......现在转换为另一个UnitType只是改变现有对象的值而不是创建一个新的Object。
我仍然有兴趣听取有关单位转换的其他想法......