質問: GlobalV.Cnt + c + b; return b; } } ``` 続けてで申し訳ないのですが、もし、A信号の処理をしている最中に、 B信号が来た場合、新たにclass1がインスタンスされた場合、A信号で処理していたclass1は併合もしくは消えてしまうのでしょうか。 同時に来た時は・・・ ![画像の説明をここに入力](https://i.stack.imgur.com/Cck8Z.png) 長文、分かりにくい質問で申し訳ありませんが、ご教授下さると幸いです。よろしくお願いいたします。
回答: GlobalVは内部クラスですがstaticクラスのためインスタンス間で値が共有されています。下記コードと等価です。 ``` class Class1 { public static int Cnt = 0; } ``` インスタンス生成時に初期化する予定ならCntはフィールドで保持すべきです。 ただし、「常時起動し、何か信号を受信したら、出力し、出力したらリセットはせず、待機状態」という条件を考えると、受信機インスタンスはプログラム中1つだけでいいように思います。 ``` static void Main(string[] args) { Receiver receiver = new Receiver(); for (int i = 0; i < 2; i++) //2回の信号が順々にきた { int a = 1; a = receiver.A(a); Console.WriteLine(a); } } ``` 次に信号の連続受信についてですが、今回の実装では受信機インスタンスのスコープはループ内のみとなっています。そのため、ループの外から受信機インスタンスにアクセスすることはできず、 近いうちにガベージコレクションで消える運命なので、「消えてしまう」といって差し支えありません。B信号で処理していたclass1も同様です。 余談ですが、今回の実装だとA信号の処理が終了するまでB信号の送信が行われません。そのため、同時に信号が来るということはありません。この辺りをどうするかは仕様によりますが、考えられるパターンはこんな感じですね。 1. 送信は一気に行い、処理は順次行う:受信機にキューを実装して順次処理を行わせる。 2. 送信は一気に行い、処理は受信ごとに行う:マルチスレッドで送信・処理を行う。 以上、お役に立てれば幸いです。