2010-10-27 40 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