Следующая программа не компилируется. В чем ошибка?
class Base { public virtual void Display() { Console.WriteLine("This is Base"); } } abstract class Derived : Base { public override void Display() { Console.WriteLine("This is Derived"); } } class Program { static void Main(string[] args) { Base _base = new Derived(); _base.Display(); Console.ReadKey(); } }
Варианты ответов (правильно может быть несколько вариантов):
Абстрактный класс не может наследоваться от неабстрактного
Абстрактный класс может содержать только абстрактные методы
Нельзя использовать конструктор абстрактного класса для создания объекта этого класса
Абстрактный класс не может переопределять виртуальные методы базового класса
Нельзя использовать конструктор абстрактного класса для создания объекта этого класса. Поэтому на строке
Base _base = new Derived();
мы получим ошибку компиляции
Какие члены класса могут быть определены как абстрактные?
Абстрактными могут быть методы, свойства, индексаторы и события.
Есть ли в следующем коде ошибка? Если есть, то какая?
abstract class Base { public abstract void Display(); } abstract class Derived : Base { public override void Display() { Console.WriteLine("This is Derived"); } }
В данном коде ошибки нет
Что будет выведено на консоль в результате выполнения следующей программы и почему?
abstract class Base { protected string name = "Base"; public abstract void Display(); protected abstract void Do(); } class Derived : Base { public override void Display() { Console.WriteLine(name); } } class Program { static void Main(string[] args) { Base _base = new Derived(); _base.Display(); Console.ReadKey(); } }
Данная программа не скомпилируется, потому что производный неабстрактный класс Derived должен реализовать все абстрактные методы класса Base. В данном же случае метод Do не реализован.