2011-09-14 4 views
0

단위 변환 모듈에서 작업하고 있습니다. 여기 CodeProject뿐만 아니라 여러 좋은 아이디어를 발견했습니다. 내 코드에서 http://www.codeproject.com/KB/cs/Unit_Conversion_Sample.aspx 에서이 C# 코드와 매우 유사 보이는 당신은 아마 내가 프로그래밍 : I는 단위 기본 클래스를 생성 한측정 단위 변환 - VB.net의 클래스 구조

나는 각 단위 유형을 만들 상속에 아주 새로운 해요 있음을 수집합니다 다음 .

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 재정의를 만들고 내가 만든 각 UnitClass에 UNITTYPE위한 새로운 재정의 속성을 만드는 시도,하지만 난 그 일을 가져 오지 못했습니다.

모든 의견을 보내 주시면 감사하겠습니다. 감사합니다.

+0

나는이 작업을 수행하는 방법을 발견,하지만 난 충분히 명성을 8 시간 이상하지 자기 답이없는 수 있기 때문에 아직. 간단히 말해, 코드를 조금 재정렬하고 부울을 반환하는 Function을 True 또는 False로 사용했습니다.이 함수에서 UnitValue =를 변환 된 UnitValue로 설정 한 다음 UnitType =을 새로 선택하는 유형으로 설정했습니다. 내가 할 수있을 때 코드를 게시 할 것입니다. – GetFuzzy

답변

0

내 코드를 약간 재정렬하여 UnitValue 및 UnitType 업데이트를 수행하는 방법을 찾았을 때 내 자신의 질문에 대답하고 있습니다. 나는 Convert Function을 두 조각으로 나눴다. 먼저 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으로 변환하면 새로운 개체를 만드는 대신 기존 개체의 값이 변경됩니다.

난 아직도 단위 변환에 대한 다른 아이디어를 듣고 싶네 ...