我有一个基类和一些派生类
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的实例而不是类名)
答案 0 :(得分: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)]);
答案 1 :(得分: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);
}
您可以根据需要进行投射。
答案 2 :(得分: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
。