【C#】一度だけ実行される処理【自作クラス】
何度命令されても一度しか実行されない、というメソッドを作ります。
(2021/12/29 用例の紹介を追加)
実装するだけなら……
一度だけ実行される処理自体は、下記のように簡単に実装できます。
// 真偽値の初期値は偽 bool flag; void A() { // 真偽値が偽である場合 if (!flag) { // 処理を行う B(); // 真偽値を真に切り替える flag = true; } }
ただし、この為だけに真偽値flag
の宣言と代入を要する点に不満が残ります。
そこで一連の処理をメソッド化し、それを含むクラス自体も作ってみましょう。
ThrowawayMethod クラスを作る
冒頭で例示した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 での使用例ですが、何度も実行されるメソッド内で使用しています。
以上、一度だけ実行される処理の実装法でした。