回答編集履歴

5

MmHgをイミュータブルに変更。

2016/12/07 04:49

投稿

haru666
haru666

スコア1591

test CHANGED
@@ -64,7 +64,7 @@
64
64
 
65
65
  {
66
66
 
67
- private decimal value;
67
+ private readonly decimal value;
68
68
 
69
69
  public MmHg(decimal value, PressureUnit unit)
70
70
 

4

加筆

2016/12/07 04:49

投稿

haru666
haru666

スコア1591

test CHANGED
@@ -120,7 +120,11 @@
120
120
 
121
121
  面倒じゃなければ残りの3つもクラスにします。
122
122
 
123
- その場合はAsメソッド群つくらず、お互いにキャスト可能にします。
123
+ その場合はパブリックコンストラクタもAsメソッド群つくらず、お互いにキャスト可能にします。
124
+
125
+ 変換関数のパターンがクラス数分増えてしまいますが、それを簡易化する場合は一度全部統一単位に変換するようにすると簡単です。
126
+
127
+ ※変換関数に誤差が含まれる場合は繰り返すほど誤差が大きくなるので注意が必要です。
124
128
 
125
129
  ```
126
130
 

3

誤字の修正

2016/12/07 04:45

投稿

haru666
haru666

スコア1591

test CHANGED
@@ -54,7 +54,7 @@
54
54
 
55
55
  mmHg用のクラスを1個作成して、各値からコンバートできるパブリックコンストラクタと、変換用の関数を作ります。
56
56
 
57
- 全部の値を生の値で保持したい場合でも変数をいくつも持つのはオススメしがたいです。
57
+ 全部の値を生の値で保持したい場合でも変数をいくつも一つのクラスで持つのはオススメしがたいです。
58
58
 
59
59
 
60
60
 

2

誤字の修正

2016/12/07 04:43

投稿

haru666
haru666

スコア1591

test CHANGED
@@ -50,7 +50,7 @@
50
50
 
51
51
 
52
52
 
53
- 他の回答を見るに、mmHgをデフォルトにしたい…のなと思いますので、それをベースに回答します。
53
+ 他の回答を見るに、mmHgをデフォルトにしたい…のなと思いますので、それをベースに回答します。
54
54
 
55
55
  mmHg用のクラスを1個作成して、各値からコンバートできるパブリックコンストラクタと、変換用の関数を作ります。
56
56
 

1

質問の回答になってなかったので追記

2016/12/07 04:42

投稿

haru666
haru666

スコア1591

test CHANGED
@@ -44,9 +44,15 @@
44
44
 
45
45
  一つの文脈に複数の状態が混在するのを忌避するからですが。
46
46
 
47
+ このため、質問の回答とはちょっとズレます。
48
+
49
+ なんていうか、プロパティとして直接hPaとかが実装される、ようなことは避ける、というのが回答でしょうか。
47
50
 
48
51
 
52
+
53
+ 他の回答を見るに、mmHgをデフォルトにしたい…のなかと思いますので、それをベースに回答します。
54
+
49
- 他の回答を見るに、mmHgをデフォルトにしたかったらそれでクラス1個成して、各値からコンバートできるパブリックコンストラクタと、変換用の関数を作ります。
55
+ mmHg用のクラス1個成して、各値からコンバートできるパブリックコンストラクタと、変換用の関数を作ります。
50
56
 
51
57
  全部の値を生の値で保持したい場合でも変数をいくつも持つのはオススメしがたいです。
52
58
 
@@ -54,13 +60,13 @@
54
60
 
55
61
  ```
56
62
 
57
- public struct MercuryMillimetre
63
+ public struct MmHg
58
64
 
59
65
  {
60
66
 
61
67
  private decimal value;
62
68
 
63
- public MercuryMillimetre(decimal value, PressureUnit unit)
69
+ public MmHg(decimal value, PressureUnit unit)
64
70
 
65
71
  {
66
72
 
@@ -124,4 +130,42 @@
124
130
 
125
131
  public struct Psi;
126
132
 
133
+
134
+
135
+ // 圧力という文脈にしてしまいたい場合は以下のような感じで改めてぼかす。。。
136
+
137
+ // Box化が微妙なんだけど仕方ない。。。
138
+
139
+ public struct Pressure
140
+
141
+ {
142
+
143
+ private readonly object value;
144
+
145
+ public Pressure(HectoPascal value) { this.value = value; }
146
+
147
+ public Pressure(MmHg value) { this.value = value; }
148
+
149
+ public Pressure(Bar value) { this.value = value; }
150
+
151
+ public Pressure(Psi value) { this.value = value; }
152
+
153
+
154
+
155
+ public HectoPascal AsHectoPascal { get { return (HectoPascal)value; } }
156
+
157
+ public MmHg AsMmHg { get { return (MmHg)value; } }
158
+
159
+ public Bar AsBar { get { return (Bar)value; } }
160
+
161
+ public Psi AsPsi { get { return (Psi)value; } }
162
+
163
+ }
164
+
127
165
  ```
166
+
167
+
168
+
169
+ mmHgだけは悩みます…単位をそのままクラスにするなら問答無用でMmHgです。(規約を破りたくないので。)
170
+
171
+ もしくは、元の名前を使います。Millimeter of mercuryなんで、MillimeterOfMercuryですかね。