如何定义派生类的"列表"?

CSh*_*per 1 c# types class derived

我有一个基类和一些派生类

public class MyBase {...}
public class MyClass1 : MyBase {...}
public class MyClass2 : MyBase {...}
Run Code Online (Sandbox Code Playgroud)

现在我想列出这些派生类(类!!不是类的实例!),然后我想随机创建这些派生类之一的一个实例.

这是如何运作的??

这里我想要的伪C#:)

List<MyBase> classList = new List<MyBase> () { MyClass1, MyClass2, MyClass3, ...}

MyBase randomInstance = new classList[random.Next(0,classList.Count-1)]();
Run Code Online (Sandbox Code Playgroud)

(不幸的是,这个List构造需要MyBase的实例而不是类名)

nit*_*one 5

类似的东西(假设一个no-args构造函数,B和C都是从A派生的):

List<Type> types = new List<Type> { typeof(A), typeof(B), typeof(C) };

A instance = (A)Activator.CreateInstance(types[r.Next(0, types.Count)]);
Run Code Online (Sandbox Code Playgroud)


Chr*_*son 5

您可以从这样的类型创建

class MyBase
{
}

class MyClass1 : MyBase
{
}

class MyClass2 : MyBase
{
}
Run Code Online (Sandbox Code Playgroud)

这使用System.Activator来创建对象.

void Main()
{
    var typesToPickFrom = new List<Type>()
    {
        typeof(MyBase),
        typeof(MyClass1),
        typeof(MyClass2)
    };

    var rnd = new Random();
    Type typeToCreate = typesToPickFrom [rnd.Next(typesToPickFrom.Count)];
    object newObject = Activator.CreateInstance(typeToCreate);
}
Run Code Online (Sandbox Code Playgroud)

您可以根据需要进行投射.