2010-10-27 75 views
2

正如我們所知,我們無法創建abstract class的實例。C#抽象類,與數組初始化配合使用

我只想知道,如果我們創建抽象類的數組,它肯定會工作。

E.g.

public abstract class Creator 
{ 
    public abstract void DoSomething(); 
} 

Creator creator = new Creator(); // this will give you compilation error! 

Creator[] creator = new Creator[2]; // this will SURE work and will NOT give you compilation error. 

任何人都可以請讓我知道爲什麼會發生這種情況,爲什麼它與數組初始化?

在此先感謝。

回答

6

在初始化期間存儲在數組中的值將全部爲null,所以這實際上並不創建任何抽象類的實例。數組初始化對應於以下(正確的)路線:

Creator creator = null; 

創建類型AbstractClass[]的陣列實際上是非常有用的,因爲你可以再店內引用一些具體的數組中的(繼承)類。例如:

var objects = new object[2]; 
objects[0] = "Hello"; 
objects[1] = new System.Random(); 

然後你就可以例如遍歷objects陣列上的所有對象調用ToString()

2

這裏要記住的是,你沒有創建Creator的任何實例,你正在創建這些類型的數組,其價值是null

1
Creator[] creator = new Creator[2]; 

只是簡單地初始化一個數組來保存Creator類的兩個實例。它並沒有爲你實例化類的任何實例。在初始化它們之前,這兩個元素仍然是null