2013-07-05 52 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