私は単位変換モジュールに取り組んでいます。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
次に、このクラスを継承して、Unit 変換関数を組み込んだ Unit の作成を開始します。
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
長さ、圧力など、いくつかの異なる単位タイプを作成する必要があります。これは、1 つの問題を除いてうまく機能しています。UnitType を変更して、UnitValue を自動的に更新できるようにしたいと考えています。Unit オブジェクトの値が 1 でタイプが Inch の場合、タイプが Cm に変更されると、値は 2.54 に更新されます。
このようなもの....この例を見てきましたが、ここでの違いは、作成する新しい UnitClass ごとに変更されるため、基本クラスで Covert 関数を指定できないことです。
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 をオーバーライド可能にして、作成した各 UnitClass で UnitType の新しいオーバーライド プロパティを作成しようとしましたが、うまくいきませんでした。
どんな提案でも大歓迎です。どうもありがとう!