こんにちは。YMです。
今回はenumを使用して複数の状態を同時に管理する方法を復習がてらこちらに書いていこうと思います。
これを行うことによって複数の状態を同時に管理することができます。
まずはenumを使用して各状態を定義していきます。
[Flags]
public enum Status
{
None = 0,
State1 = 1
State2 = 2,
State3 = 4,
State4 = 8,
}
まずは各状態に2ⁿの数字を割り振っていきます。
この時に1<<0のような書き方もできこの場合は1を0ビットだけ左にシフトするという意味なので1が当てはまります。
次に状態を追加していきます
private Status status = Status.None;
status |= Status.State1;
状態を追加するときはor文を使用します。
次に状態を削除していきます
private Status status = Status.None;
status &= ~Status.State1;
状態を削除する場合は~を使用し否定したうえでAnd文を使用することで状態を削除することができます。
少し分かり辛いかもしれないので処理をわかりやすく図にしてみました
何もない状態からState3状態を付与するとき
0000 or 0100 = 0100(4)
State3が付与された状態にState1を付与するとき
0100 or 0001 = 0101(5)
上の状態からState2を付与しState3を削除するとき
0101 or 0010 = 0111 (7)
0111 and ~0100 = 0111 and 1011 = 0011(3)
このようにすることで複数の状態を同時に表現することができるということが分かったと思います。
以上、最後までご覧いただきありがとうございました。