C# staticプロパティ

C#サンプルコードプログラミング

概要説明

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;
        }
    }
}

実行結果

出発ボタンをクリックします。

出発し、移動します。

停止ボタンをクリックします。

各自動車が停止します。

コメント

タイトルとURLをコピーしました