うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【C#】特定のクラスを継承した全クラスのインスタンスを作成する

このコードは BindingFlags フラグに対応していないので
internal クラスの場合インスタンスが生成できなくなるので注意

internal クラスの場合はインスタンス作成時に引数がかなければ Activator.CreateInstance(t, true) で作成できる

using System;
using System.Linq;

public static T[] CreateInstances<T>(params object[] args) where T : class
{
    var type = typeof(T);

    return type.Assembly.GetTypes()
        .Where(t => !t.IsAbstract && t.IsSubclassOf(type))
        .Select(t => Activator.CreateInstance(t, args) as T)
        .ToArray();
}

使い方

public class Base
{}

public class Child1 : Base
{}

public class Child2 : Base
{}

void Main()
{
    // これで Child1 と Child2 のインスタンスが作成される
    var instances = CreateInstances<Base>();
}