如何创建类的字典,以便我可以使用键来确定要初始化的新类?

Kyt*_*ton 2 c# abstract-class dictionary

按这个问题,我如何创建一个字典在C#中,其中的关键是说,一个整数,但值是我可以只用在字典中值调用构造函数的类?每个类都派生自一个抽象类,它们采用相同的参数,所以我觉得我应该能够将结果引用存储在抽象类类型的变量中的新类对象中.

话虽这么说,Dictionary的值集通常填充对象的引用,而不是类型本身.作为一个简单的例子,这是我正在尝试做的事情:

abstract class BaseObject {

     int someInt;
}

class ObjectA : BaseObject {

    ObjectA (int number) {
        someInt = number;
    }
} 

class ObjectB : BaseObject {

    ObjectB (int number) {
        someInt = number;
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望能够做到以下几点:

Dictionary<int, ???????> objectTypes = new Dictionary<int, ???????>();

objectTypes.Add(0, ObjectA);
objectTypes.Add(1, ObjectB);
Run Code Online (Sandbox Code Playgroud)

所以我最终可以:

BaseObject newObjectA, newObjectB;

newObjectA = new objectTypes[0](1000);
newObjectB = new objectTypes[1](2000);
Run Code Online (Sandbox Code Playgroud)

语法可能大不相同,但我希望我至少能够克服我想要完成的任务.

Phu*_*yen 5

你在找这样的东西吗?

var objectTypes = new Dictionary<int, Func<int, BaseObject>>();
objectTypes[0] = input => new ObjectA(input);
objectTypes[1] = input => new ObjectB(input);

objectTypes[0](1000);
objectTypes[1](2000);
Run Code Online (Sandbox Code Playgroud)

这里不存储对象,而是存储一个Func来生成每个具体对象