なんで四則演算可能なプリミティブ型のためにICalculableみたいなインターフェイスを用意しなかったんだろう
ジェネリッククラスが書き難い
>>295 俺もそれは思ったことあるけど、その方法って微妙なところもあるのよね。
class Rational : ICalculable // 有理数
と
class Galois2 : ICalculable // 位数2のガロア体
があったときに、
Rational p;
Galois2 q;
var r = p + q;
はどう扱えばいいのかとか。
左オペランドの側に合わせて、
p.Add(q) と解釈することにして、
Add の中で型チェックすればよさそうに思えるけど、
それだと今度、
class Real : ICalculable // 多倍長・任意精度の実数
みたいなのに対して、
double x;
Real y;
var z = x + y; // double と Real 間の演算は認めたい
をどうするかで困る。
implicit なキャストと上記のルールで何とかならないでもないけど。
異なる型の間では演算がそもそも定義されない場合もあるし
同じ型同士でも乗算は定義されるけど除算は定義されないとかあるし
定義できる場合だけでも使えるようにすればいいと思うけどなぁ
定義できない場合は例外投げるようにするとか
あと制約条件はなんでシールクラスはだめなんだろう
>あと制約条件はなんでシールクラスはだめなんだろう
できたところで何の意味がある?w
>>300 制約条件にintやdoubleなんかを指定できるようになる
structでいいじゃん
intって書けばいいんじゃないか
?
Tの制約条件にintって書くならそのままintって書けばいいんじゃないのかと
特殊化が出来てほしいと思うこともある。
プライマリ制約別に特殊化って感じで。
コードで書いてみてくれんか
特殊化から出来ないからな
まあ別に困らないけど
void Method<T>(T num) where T : int って書くなら
void Method(int num) でいいんじゃないのかと
ああなるほど
値型なら実行時に特殊化されるけど