新しいものを表示

あ!><; 普通に継承でもできる!><;(継承にして、AppleCountとMikanCount のFruitCountへの型変換の定義は削除でおk><; 思い込みで出来ないと思ってた><;)

ていうか色々ぐぐってると「そういうのはF# でやりましょう」的な色々が出てる気がしなくもない><;

?><;
C# さん「インターフェイスに演算子を含めることは出来ません。」

orange さんがブースト

interface実装するとか拡張メソッドとか…?

で、それらを実際に実装してみたら、こうかけるようになった>< 

AppleCount a = (AppleCount)5;
MikanCount b = (MikanCount)3;
FruitCount c = ((FruitCount)a + (FruitCount)b);

Console.WriteLine((int)c);

・・・ということは、リンゴとみかんの合計の果物の数を計算したい場合は、最低限『果物の数』の+演算子を実装すればよい・・・?><

あ><; 演算子も定義しないと全部intに型変換して計算するコードになるから型の意味が無い><;(=型安全じゃ無い)

さっきのc# のコードのやり方で、リンゴとみかんの数を型安全に計算したいのであれば、さっきのコードで『果物の数』と『リンゴの数』と『みかんの数』を作って、『リンゴの数』と『みかんの数』に『果物の数』への明示的な型変換をつければおk?><(言語仕様としての継承が使えないのでちょっとキモイけど><;)

使い方><; 

MyInt_MinimumImpl a = (MyInt_MinimumImpl)1;
MyInt_MinimumImpl b = (MyInt_MinimumImpl)2;
MyInt_MinimumImpl c = (MyInt_MinimumImpl)((int)a + (int)b);
Console.WriteLine((int)c);

最小なので、つまり単にintと明示的な型変換を出来るだけという><; mstdn.nere9.help/@orange_in_sp

c# で独自の整数型、こうなる?><; 

// (最小の実装なのでキャストしまくらないと足し算すら出来ない><;)

struct MyInt_MinimumImpl
{
private int _internalValue;

public MyInt_MinimumImpl(int value)
{
_internalValue = value;
}

public static explicit operator int(MyInt_MinimumImpl v)
{
return v._internalValue;
}

public static explicit operator MyInt_MinimumImpl(int v)
{
return new MyInt_MinimumImpl(v);
}
}

C# では演算子全部自分で書くしかない?><;(ジェネレータ作るべき?><;)

ていうかAdaでできる(らしい)こういう事をC# でしたい・・・>< 

type My_Int is range -100 .. 100;

って書くだけで、自分用の整数型が出来ちゃうらしい・・・><

整数で学ぶAdaの型 panathenaia.halfmoon.jp/alang/

この機能Adaみたいな間違えると人が死ぬ分野で使われる言語にあったらすごくおもしろそう><

orange さんがブースト

あくまで単位だから、りんごの個数とみかんの個数に対して四則演算はできないみたいなのとはちと違うけど。

スレッドを表示
orange さんがブースト

あっちの数値とこっちの数値は別物なんだけどという話は F# だとこんなのもありますね。
Units of Measureのススメ - Qiita qiita.com/adacola/items/b65752

?><
”C# では構造体struct(C++までの知識で言えば、フィールドしかないclassがstruct)を使えば
値型を自作できるらしい。”
型を学ぶ~C# の値型はJava人にとって驚きだ juujisya.jugem.jp/?eid=5

「リンゴが5個ありました。みかんが3個ありました。いくつでしょう?><」
「なにが?><;」
ってAdaでは当たり前っぽいけど、C# では簡単に書けない・・・?><(C# で独自の単純型ってどうやって作るんだろう?><)

古いものを表示
:realtek:

思考の /dev/null