【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>();
}