0

如果我传递了一个实现接口的类的实例,我不一定知道确切的类型。如果我想创建这个类的数组(不管它是什么),我可以这样做:

IWhatever[] ArrayOfClass = (IWhatever[])Array.CreateInstance(InstanceOfClass.GetType(), length);

只要 InstanceOfClass 是实现 IWhatever 的类的实例,它就可以工作。

问题是我似乎无法弄清楚如何初始化数组的成员。我认为new IWhatever()可能有效,但它没有。

如何构造数组的成员?

4

2 回答 2

2

您需要将每个成员初始化为某个实现接口的类的实例。

如果您想要与 相同的类型InstanceOfClass,并且该类型具有默认构造函数,则可以使用以下内容:

for(int i=0;i<ArrayOfClass.Length;++i)
{
    ArrayOfClass[i] = (IWhatever)Activator.CreateInstance(InstanceOfClass.GetType());
}
于 2012-10-01T20:59:12.300 回答
0

向接口添加工厂方法。工厂方法将创建正确特定类型的实例,您可以根据其泛型类型将其分配为数组。

于 2012-10-01T21:03:16.987 回答