【问题标题】:Velocity Data Types and conversions速度数据类型和转换
【发布时间】:2013-07-05 06:24:09
【问题描述】:

我正在从事一个与物体的位置和速度有很大关系的项目。在处理对象的速度时,我可以在 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 等“数据类型”称为“数据类型”是否正确?

【问题讨论】:

    标签: c# types physics


    【解决方案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-05-05
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多