0

我正在做一个与物体的位置和速度有很大关系的项目。在处理对象的速度时,我可以在 M/M、F/M、M/H、Km/H、Knots 和 Mach 之间进行转换。现在我注意到发生了很多代码复制,我开始怀疑继续创建类似于 double、float 或 int 的新数据类型是否对我有用。如果是这样,我打算称它们为 mpm、fpm、kmph 等...出现这种情况的原因是由于转换,而我可以创建一个静态类或其他东西,然后放入一堆方法来做转换对我来说,我想知道它是否不会更好地组织在数据类型中。

就像是:

    mpm 速度 = 45;
    结 结 = Speed.ToKnot();
    双温度 = 32;
    // 马赫松散地依赖于温度或压力。
    马赫声速 = Speed.ToMach(温度);
    

现在我只是在这里谈论一个模型还是什么?有点想避免整个mpm Speed = new mpm{MetersPerMinute = 46,};

问题:

  • 有没有更好的方法来解决这个问题,同时仍然让它非常便携?
  • 如果这是可能且合理的,我将如何实施?
  • 当我将诸如 int、float 和 double “数据类型”之类的东西称为“数据类型”时,我是否正确?
4

1 回答 1

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 是“数据类型”,但称它们为“值类型”更准确,因为“对象”也是“数据类型”但“引用类型”。

于 2013-07-05T07:13:13.197 回答