我有很多計算項目涉及到很多現實世界單位:使用現實世界的單位,而不是類型
- 距離;
- 溫度;
- 流速;
- ...
該項目涉及複雜和衆多的計算公式。
這就是爲什麼我應該像溫度,距離使用自定義類型的...可以很好的爲代碼的可讀性。例如:
Temperature x = -55.3;
Meter y = 3;
或
var x = new Temperature(-55.3);
我試圖使一個使用雙內值的溫度等級。
public class Temperature
{
double _Value = double.NaN;
public Temperature() { }
public Temperature(double v) {
_Value = v;
}
public static implicit operator Temperature(double v) {
return new Temperature(v);
}
}
但是班級可以爲空。這意味着類似於:
Temperature myTemp;
是「正確的」並且將爲空。我不想要這個。我不想使用結構,因爲他們太有限:
- 他們不能使用無參數的構造函數,也沒有實例字段intializers像
double _Value = double.Nan;
來定義默認值(我的魔杖默認標的雙重價值是NAN) - 他們不能從類繼承,他們纔可以實現接口
他們我不知道是否有辦法告訴C#:
Temperature myTemp = 23K; // C# does not implement anything to make K unit...
但我知道C#不處理自定義單位。
Temperature myTemp = new Kelvin(23); // This might work
所以,我想我可以創建一個從溫度遺傳了兩個攝氏度和Kelvin類,然後我開始懷疑,如果這個想法真的很值得的,因爲它涉及到很多編碼和測試。
這是討論中我想開始:
會在我的代碼,而不是.NET類型使用現實世界的單位將是好事還是壞事?有沒有人已經?什麼是陷阱和最佳實踐?或者我應該更好地遠離這一點,並使用標準的.NET類型?
旁註:F#本地支持單元 – CodesInChaos 2010-10-22 10:28:03
爲什麼你認爲結構是有限的?我認爲結構正是我在這裏使用的。你的類將只攜帶一個數字,不可變的值 - 對於結構來說是理想的用例。 – NOtherDev 2010-10-22 10:29:03
Interresting!不幸的是,我不能在我的項目中使用F#。但我肯定會注意到這個將來 – Larry 2010-10-22 10:30:14