Tsuの雑記¯\_(ツ)_/¯

主に製作メモ・備忘録として使用。製作したアプリのリンクもあります。

【C#】一度だけ実行される処理【自作クラス】

何度命令されても一度しか実行されない、というメソッドを作ります。

(2021/12/29 用例の紹介を追加)


実装するだけなら……

一度だけ実行される処理自体は、下記のように簡単に実装できます。

// 真偽値の初期値は偽
bool flag;

void A()
{
    // 真偽値が偽である場合
    if (!flag)
    {
        // 処理を行う
        B();
        // 真偽値を真に切り替える
        flag = true;
    }
}

ただし、この為だけに真偽値flagの宣言と代入を要する点に不満が残ります。

そこで一連の処理をメソッド化し、それを含むクラス自体も作ってみましょう。


ThrowawayMethod クラスを作る

throwaway-method · GitHub

冒頭で例示したB()メソッドの部分を、RunOnce()というメソッドのパラメータとしました。

これでRunOnce()の中身には、引数として任意の処理を指定できます。


用例

冒頭で例示した命令を、ThrowawayMethodに書き換えます。

void A()
{
    // ThrowawayMethod クラスのインスタンス生成
    var method = new ThrowawayMethod();
    // 一度だけ処理を行う
    method.RunOnce(B);

    /*
    // 二度目は実行されない
    method.RunOnce(B);
    // 中身の処理を変えても method インスタンスでは二度と実行されない
    method.RunOnce(() => number++);

    // ThrowawayMethod クラスのインスタンス生成
    var method2 = new ThrowawayMethod();
    // 新しいインスタンスでも一度だけ実行できる
    method2.RunOnce(B);
    */
}

実際の置き換えはコメントアウトより前の部分だけなので、かなり短くなっていますね。

コメントアウト部分も、実際に試してみると良いでしょう。

(2021/12/29 用例の紹介を追加)

以下は Unity での使用例ですが、何度も実行されるメソッド内で使用しています。

tsu-games.hatenablog.com

以上、一度だけ実行される処理の実装法でした。