2012-10-01 60 views
0

如果我傳遞了一個實現接口的類的實例,我不一定知道確切的類型。如果我要創建這個類(不管它可能是)的數組,我可以這樣做是這樣的:如何在不知道類型的情況下初始化數組中的項目?

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

只要InstanceOfClass是實現IWhatever一個類的實例,這個工程。我不知道如何初始化數組的成員。我認爲new IWhatever()可能會起作用,但事實並非如此。

如何構建數組的成員?

+3

數組差異不好,請不要使用它! –

+0

爲什麼不使用'new IWhatever [length]'來創建數組本身?這將能夠保存與'InstanceOfClass'具有相同類型的對象。 –

+0

Ben Voigt在如何創建arrray方面是正確的,但添加項目時必須使用實現接口的類。許多人喜歡使用Factory方法來創建這些方法,但是我發現那種單調乏味,只是在需要它們的地方使用常規構造函數(除非需要大量計算才能調用構造函數,然後淺顯我的驕傲並使用工廠) –

回答

2

您需要將每個成員初始化爲實現該接口的某個類的實例。

如果你想同類型InstanceOfClass,如果該類型有一個默認的構造函數,你可以使用類似:

for(int i=0;i<ArrayOfClass.Length;++i) 
{ 
    ArrayOfClass[i] = (IWhatever)Activator.CreateInstance(InstanceOfClass.GetType()); 
} 
0

工廠方法添加到該接口。工廠方法將創建一個正確特定類型的實例 ,根據其通用類型將其指定爲數組。

相關問題