1

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

public class MyBase {...}
public class MyClass1 : MyBase {...}
public class MyClass2 : MyBase {...}

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

这是如何运作的??

这是我想要的伪 C# :)

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

MyBase randomInstance = new classList[random.Next(0,classList.Count-1)]();

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

4

3 回答 3

6

类似的东西(假设一个无参数的构造函数,并且 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)]);
于 2013-04-25T19:06:03.190 回答
5

您可以从这样的类型创建

class MyBase
{
}

class MyClass1 : MyBase
{
}

class MyClass2 : MyBase
{
}

这使用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);
}

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

于 2013-04-25T19:16:22.137 回答
3

如您所说,如果您想“创建”一个随机实例:

var selection = random.Next(0,2)

switch (selection)
{
    case 1: return new MyBase();
    case 2: return new MyClass1();
    case 3: return new MyClass2();
}

为所有这些类定义一个公共可能很有用interface,这样您就可以从方法中返回一些东西。或者您可以简单地返回一个object或一个dynamic

于 2013-04-25T19:00:20.610 回答