Winフォームアプリでコントロールの処理

フォームアプリでは、ButtonやLabelなどは、フォームのControlsリストにAddされています
この中から、必要なクラスを抽出して処理をするサンプルを考えてみましょう

フォームアプリでいくつかのコントロールのインスタンスが存在するとします

コード

Controlsリストに複数のコントロールがAddされている状態とします
サンプルは、GameObject型を持ったインスタンスを抽出して、抽象メソッドを呼び出すコードになります
GameObjectはRunメソッドを実装しているため、派生クラスのインスタンスでも実行可能です

foreach (var control in form.Controls)
{
    if (control.GetType().IsSubclassOf(typeof(GameObject)))
    {
        gameObjects.Add(control as GameObject);
        (control as GameObject).Run();
    }
}

基底クラスを作ります
UnityでのUpdate()メソッドを作り出しています

abstract class GameObject
{
    public int Interval { get; set; } = 10;

    public void Run()
    {
        update.Tick += Update;
        update.Interval = Interval;
        update.Enabled = true;
    }
    public abstract void Update(object sender, EventArgs e);
}

GameObjectクラスを継承しています
抽象メソッドのUpdateを強制的に実装するように定義しています

class Item : GameObject
{
    public override void Update(object sender, EventArgs e)
    {
        // コード
    }
}

クラス図

3つの派生クラスを作っている例です
それぞれのUpdateメソッド(イベント)が実行されます