速度数据类型和转换

时间:2013-07-05 06:24:09

标签: c# types physics

我正在开发一个与对象的位置和速度有很大关系的项目。在处理物体的速度时,我能够转换为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“data types”这样的东西时,我是否正确?

1 个答案:

答案 0 :(得分: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)是的int,float和double是'数据类型',但更准确地称它们为'值类型',因为'对象'也是'数据类型'但是'引用类型'。