2011-09-14 9 views
0

私は単位変換モジュールで作業しています。私はCodeProjectだけでなく、ここでいくつかの良いアイデアを見つけました。私のコードはこのC#コードと非常によく似ていますhttp://www.codeproject.com/KB/cs/Unit_Conversion_Sample.aspx 以下から、私はかなりプログラミングの面白さがわかります:)測定単位変換 - VB.netでのクラスの構造

私は各ユニットタイプの作成を継承するUnitsベースクラスを作成しました。

次に、このクラスを継承し、ユニット変換関数を含むユニットの作成を開始します。

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に更新されます。

このような例がありますが、ここでの例は分かりましたが、ここでの違いは、私が作成する新しいユニットクラスごとに変更されるため、ベースクラスで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のための新しいオーバーライドプロパティを作成しようとしたが、私はそれが仕事を得ることができませんでした。

ご意見をいただければ幸いです。 ありがとう!

+0

...単位の変換のための他のアイデアを聞くことに興味があると思いまだ。簡潔にするために、私のコードを少し並べ替えて、ブールTrueまたはFalseを返す関数を使用しました。その関数では、UnitValue =を変換されたUnitValueに設定し、UnitType =を新しく選択するタイプに設定しました。できるだけコードを投稿します。 – GetFuzzy

答えて

0

私のコードを少し並べ替えて、UnitValueとUnitTypeの更新を達成する方法を見つけたので、私は自分の質問に答えています。 Convert関数を2つに分割しました。最初に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に変換するだけでなく、新しいオブジェクトを作成する既存のオブジェクトの値を変更します。

私はまだ私はこれを行う方法を見つけましたが、私は十分な評判を持っていないので、私は8時間以上、自己の答えをすることはできません