自分で定義をして、比較したり簡単に使うには?(ユーザー定義型) - TejimaTuyoshi/returnread GitHub Wiki
C#以外の物全部。
コライダーとかがそう。
インベントリを作る際に有用。
ソートをする際は、計算で十分。
うん。なにこの話関係ないわ。
ちなみに、ソートの内容を決める方法として、「CompareTo」がある。
IComparable インターフェイスを継承して CompareTo メソッドを実装することにより、そのクラスのインスタンスはソート可能になる。
CompareTo メソッドは object 型を引数にとり、int 型の値を返す。
これは、int同士を比較して、大小を決めるものになる。
(自分が小さい場合は-1,同じ場合は0,大きい場合は1追加されるようにした方が分かりやすい。)
これがないと[順番がわからない]として{コンパイルエラー}になる。
尺やねぇ。
まぁ、仕方ないねPCだもの。「てじお」
・・・塩ではない(ダメ押し)
ちなみに、これは「自分が作った場合」なら簡単にできるが、
他の人が作った場合は、そればかりではない。
その場合は、Linqを使用する。
入れ替え型がはっきりしている物は、sortで良いが、
Vectorや自分が作ったクラスは「自分で定義」すると良い。
逆に、intなどは「定義する」やり方は{悪}である。(手間)
ちなみに、IConparableは「自分で定義する」やり方だが、{自分たちで書く}ことはあまりないと思うので、
読めるようにしておこう。
つぎの定義方法として「ToString() のオーバーライド」がある。
元々の話として、Vectorの座標をログに表示する際、「Update」内でやろうとすると、{当たり前ではない方法}で出る。
これを自分が作ったクラスでやると、「クラス名」が出てきてしまう。
これは、「Tostring」が作用しており、vectorは気を利かせて出してくれるものの、
自分で作るとその[気]がなくなって、文字列を出していた。
これの対策として、オーバーライドすることで行うことが可能になる。
$"[{},{}]";
と、オーバーライドの中に入れておけば大丈夫。
気を利かせているのと内容が一緒。
最後の方法(※使うことはない)は演算子のオーバーロード
演算オペランドとも言う。
これは、Stringをintのように計算できるようにするもの。
定義方法は、「合成した」ことにすることを前提にする。
簡単に言うと、[operator]によってクラス内(ネーム)で定義する。
でもこんな方法使わないらしい。
Fusion(クラスネーム ネーム)
{
選んだアイテムたちを減らす
IDをランダムに抽出してそのアイテムにする。
}
ちなみに別の方法では、vectorも定義できる。
vectorの変数同士で計算可能。
ちなみにこの時の計算方法は「外積」の方法。
うん。どっかで聞いた気がする...