出于性能原因,我使用的是long
而不是decimal
。
我想区分long
,long
表示long
,decimal
表示using myDecimal = System.Int64;
。所以我想宣布像using myDecimal = System.Int64;
这样的东西。但是这种声明只在它声明的文件中可见。我需要一些可以在整个程序中使用的东西。
Here和here建议创建“包装”类,但它看起来很尴尬!我想我最好将long
复制粘贴到我正在使用的每个文件中。
我是否认为我没有比这两个选项更好的东西?
为什么我不想只使用public class FutTradeEntry
{
public long orderId;
public int status;
public int amount;
public int amount_rest;
public sbyte action;
public myDecimal price;
public myDecimal deal_price;
public int ext_id;
}
?因为可读性!只需比较
public class FutTradeEntry
{
public long orderId;
public int status;
public int amount;
public int amount_rest;
public sbyte action;
public long price;
public long deal_price;
public int ext_id;
}
和
long
使用相同类型long
来存储完全不同的东西是非常困惑的。每当我看到{{1}}变量时,我都会想到“它是什么,长或小数?”
答案 0 :(得分:5)
我是否认为我没有比这两个选项更好的东西?
不,还有第三种选择:当事物是long
时,说出long
,故事结束。这就是我要做的。
答案 1 :(得分:1)
没有其他选择。只需通过using
或struct
包装的别名。我个人选择struct
包装器,因为它提供了更好的类型安全性,您可以根据需要定义重载运算符。它的工作量更大,但比在整个代码库中复制和粘贴一行代码更好,这样会更容易出错并且维护性更差。
请注意,使用class
包装它会使其成为引用类型,而struct
是值类型(与{相同} {1}}和其他原始类型。)
答案 2 :(得分:1)
目前我还不清楚这里的目标是什么,但这是为至少原始类型的整数子集创建“新名称”的一种(略微有点冒犯)方式:
public enum MyMeaningfulLong : long
{
}
它比typedef强一点,但它有类似的效果。然而,这里更大的问题是,它有点违背了“枚举”的精神,它代表了一组已知的常数值。包装类(可能带有隐式转换)是一种更清晰的方法。