«Не удается создать экземпляр абстрактного класса или интерфейса» C # сообщение об ошибке - PullRequest
7 голосов
/ 09 февраля 2011

Я изменил свой базовый класс на abstract для проекта, и теперь я получаю следующую ошибку:

Невозможно создать экземпляр абстрактного класса или интерфейса

Получаю ли я сообщение об ошибке, поскольку присвоение имени новому экземпляру класса abstract недопустимо?

newPlane = new Airplane_Abstract(name, position);

Ответы [ 3 ]

19 голосов
/ 09 февраля 2011

Вы не можете создать экземпляр абстрактного класса.Думайте об этом как об интерфейсе, который может также содержать некоторую логику реализации.Что бы вы ожидали, если бы вы вызвали абстрактный метод экземпляра без определения?

14 голосов
/ 09 февраля 2011

Я видел ваш предыдущий вопрос, в котором вы спрашивали о значении «чисто виртуальный» (abstract в C #).

Причина, по которой вы не можете создать экземпляр класса abstract, заключается в том, что он предположительно имеет abstract членов, а не имеет реализации . Скажем, ваш класс выглядит так:

abstract class Airplane_Abstract
{
    public abstract int GetSomeInteger();
}

Тогда, предполагая, что вы можете создать один из них, вы можете написать код, подобный этому:

var airplane = new Airplane_Abstract();

// What would this be?
int integer = airplane.GetSomeInteger();

Конечно, я не верю, что у вас на самом деле есть , чтобы иметь абстрактные члены в абстрактном классе. Но общая идея абстрактного класса заключается в том, что он не может существовать сам по себе; это должно быть далее определено в классе, который наследуется от него. Абстрактные члены являются наиболее очевидной иллюстрацией того, почему это так; Могут быть и другие причины.

Вспомните, например, Shape. Это довольно распространенный пример чего-то, что имело бы смысл как абстрактный класс. Вы не можете создать экземпляр просто a Shape, не так ли? («Создайте фигуру». «Какую форму?» «Никакой. Просто абстрактная фигура. Разве это не работает, не так ли?)

5 голосов
/ 09 февраля 2011

Вы не можете создать экземпляр абстрактного класса. Вот что означает abstract .

...