static
↓通常のプロパティこれですが
・public bool runFlg;
↓staticをつけると静的なプロパティになります。
・public static bool runFlg;
通常のプロパティはオブジェクト側に領域を持ち、それぞれに値を設定できます。
静的なプロパティはクラス側に領域を持ちます。
その為、クラスで唯一の領域となり、そこだけにしか値を設定できません。
つまり、staticをつけると、どこからみても唯一のプロパティが作れます。
ちなみにクラス側に領域を持つのでNEWしなくても静的プロパティにセットできます。
自動車クラスを例に説明します。
・自動車名は各オブジェクトで持ちたい。
・実行フラグは各自動車から監視するので、クラスで1つだけ持ちたい。(static)
そのイメージがこんな感じです。
自動車名は犬、鳥、猿とそれぞれのオブジェクト側で持ちます。
実行フラグはstaticなので、クラス側で持つ例です。
サンプル
参考に自動車クラスを使ったサンプル(シンプルなものですが)を作成しました。
開始ボタンをクリックすると3台の自動車が実行されます。
停止ボタンをクリックすると実行フラグ(静的なプロパティ)がOFFになります。
各自動車がそれを見て停止します。
プログラミング
言語:C#
using System.Threading;
using System.Threading.Tasks;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace サンプル
{
public partial class Form5 : Form
{
public Form5()
{
InitializeComponent();
}
// 宣言
private Car car1;
private Car car2;
private Car car3;
/// <summary>
/// 自動車クラス
/// </summary>
class Car
{
// 自動車名
public string carName { get; set; } = "";
// 実行フラグ
public static bool runFlg { get; set; } = false;
/// <summary>
/// コンストラクタ
/// </summary>
/// <param name="name"></param>
public Car(string name)
{
// 自動車名をプロパティにセットする
carName = name;
}
/// <summary>
/// 実行処理
/// </summary>
public async void start()
{
// 実行フラグをONにする
runFlg = true;
// 出発LOG
Console.WriteLine($"{DateTime.Now:yyyy/MM/dd HH:mm:ss} {carName} 号車 出発");
// 実行フラグがOFFになるまでループする
while (runFlg)
{
// 移動LOG
Console.WriteLine($"{DateTime.Now:yyyy/MM/dd HH:mm:ss} {carName} 号車 移動・・・");
// 3秒待機する
await Task.Delay(3000);
}
// 停止LOG
Console.WriteLine($"{DateTime.Now:yyyy/MM/dd HH:mm:ss} {carName} 号車 停止");
}
}
/// <summary>
/// 出発クリック処理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnStart_Click(object sender, EventArgs e)
{
// 犬号車作成
car1 = new Car("犬");
// 鳥号車作成
car2 = new Car("鳥");
// 猿号車作成
car3 = new Car("猿");
//犬号車出発
car1.start();
//1秒待機
Thread.Sleep(1000);
//鳥号車出発
car2.start();
//1秒待機
Thread.Sleep(1000);
//猿号車出発
car3.start();
}
/// <summary>
/// 停止クリック処理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnEnd_Click(object sender, EventArgs e)
{
// 全車停止(実行フラグをOFFにする)
Car.runFlg = false;
}
}
}
実行結果
出発ボタンをクリックします。
出発し、移動します。
停止ボタンをクリックします。
各自動車が停止します。