目次

概要
この記事ではC#スクリプトの仕様、通常のC#との違いや注意点について書いていきます。
C#スクリプトの言語バージョンは「8.0」で、スクリプトファイルの拡張子は「.csx」です。
ファイルの作成、コードの記述、マクロとして割り当て、実行、は以下の記事を参照してください。
usingの省略
C#スクリプトでは以下のusingディレクティブの記述を省略できます。 これらはKeyToKeyフォルダにある「ScriptConfig.json」に定義されており必要であれば自分で付け足すことも可能です。
Hello World!

通常のC#と違いクラスやMainメソッドを記述せずに処理を書き始めることが可能です。
なので、C#スクリプトでのHello Worldは1行書けば表示させられます。

記述順序

クラスやメソッドなどは記述が前後しても呼び出しが可能です。

出力
A Method
B Method
参照と外部スクリプト
C#スクリプトはアセンブリの参照や他のスクリプトとの連携が可能です。
参照を追加するには「#r」ディレクティブを使用します。
他のスクリプトファイルをロードするには「#load」ディレクティブを使用します。

#load」はロードしたファイルに定義されてあるクラスやメソッドを呼び出すことが可能になりますが、クラスやメソッドの外に定義されているコードが予め実行されてしまいます。

参照したいスクリプト: 参照する側のスクリプト:
出力
Personクラスのインスタンスが生成されました。
太郎
結果を見るとクラスのインスタンスが生成され、インスタンスが持つプロパティにアクセスできることがわかります。
このように「#load」で参照したスクリプトは先に実行されてしまうので注意が必要です。
この仕様をうまく活用してスクリプトを作っていくのもいいかもしれませんね。
C#スクリプトの強制終了
C#スクリプトはKeyToKeyの状態やその他条件によって強制終了するように作られてあります。
以下は強制終了する条件です。
条件
KeyToKeyが無効状態になった場合
設定ファイルを再読み込みした場合
マクロ割り当ての設定で「トリガーを離したときに実行中のマクロを終了させる」が有効になっている場合、トグルモードが有効になっている場合はトリガーを再度押した際に発生します。

強制終了処理はスクリプトを終了させることが出来ますが、スクリプトにおいてスレッドを新たに生成した場合そのスレッドはKeyToKeyによって強制終了されることはありません。
もしスレッドを生成している場合はDisposingイベント時に適切な解放処理を行う必要があります。

スクリプトの強制終了処理前には必ず「Disposing」イベントが発生します。
解放処理が必要な場合はこのイベントにイベントハンドラを登録しておくことをおすすめします。
Disposingイベントの「isTemporary」引数はスクリプトの解放処理においては特に意味を持ちません無視してOKです。
その他C#スクリプトに関する記事