2013-07-05 57 views
0

我正在處理一個與對象的位置和速度有很大關係的項目。在處理物體的速度時,我可以將其轉換爲M/M,F/M,M/H,Km/H,Knots和Mach。現在我注意到了很多代碼複製的發生,我開始懷疑它是否對我繼續創建類似於double,float或int的新數據類型有用。如果是的話,我打算把它們稱爲mpm,fpm,kmph等......這個原因是由於轉換,而我可以創建一個靜態類或什麼東西,只是放入一堆方法來做對於我來說轉換,我想知道它是否會更好地組織數據類型。速度數據類型和轉換

類似:

 
    mpm Speed = 45; 
    knot Knots = Speed.ToKnot(); 
    double Temperature = 32; 
    // Mach is loosely dependent on temperature or pressure. 
    mach SoundSpeed = Speed.ToMach(Temperature); 

現在我只是在這裏談論的模型還是什麼?有點想避免整個mpm Speed = new mpm{MetersPerMinute = 46,};

問題:

  • 有接近這一點的同時仍然允許它是非常便攜的更好的辦法?
  • 如果這是可能的和合理的,我將如何實現它?
  • 當我調用像int,float和double「數據類型」之類的東西時,我是否正確?

回答

1

1)我認爲這將是一個很好的方法

public struct Velosity 
{ 
    private double _value; // Value in m/s (SI system, use yours most frequently used) 
    public Velosity(double value) 
    { 
     _value = value; 
    } 

    public double GetMS() 
    { 
     return _value; 
    } 
    public double GetKmH() 
    { 
     return _value*3.6; 
    } 

    //Other Get conversions... 

    public static Velosity FromMS(double value) 
    { 
     return new Velosity(value); 
    } 
    public static Velosity FromKmH(double value) 
    { 
     return new Velosity(value/3.6); 
    } 

    //Other From conversions... 

    public static implicit operator Velosity(double value) 
    { 
     return new Velosity(value); 
    } 

    public static implicit operator double(Velosity velosity) 
    { 
     return velosity._value; 
    } 

} 


static void Main(string[] args) 
{ 
    var v = Velosity.FromMS(10) + Velosity.FromKmH(10); 
    Velosity velosity = v; 
    Console.WriteLine(v); 
    Console.WriteLine(velosity.GetKmH()); 
    Console.WriteLine(velosity.GetMS()); 
    velosity += 10; 
    Console.WriteLine(velosity.GetMS()); 
    Console.ReadKey(); 
} 

2)是整數,浮點和雙是「數據類型」,但更準確的稱他們爲「值類型」,因爲'對象'也是'數據類型',但'引用類型'。

+0

非常感謝您的回答 – Oxymoron