2010-10-27 2 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, пока вы их не инициализируете.

Смежные вопросы