Абстрактные классы и члены классов

Последнее обновление: 04.08.2018
Вопрос 1

Следующая программа не компилируется. В чем ошибка?

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();

мы получим ошибку компиляции

Вопрос 2

Какие члены класса могут быть определены как абстрактные?

Абстрактными могут быть методы, свойства, индексаторы и события.

Вопрос 3

Есть ли в следующем коде ошибка? Если есть, то какая?

abstract class Base
{
	public abstract void Display();
}
abstract class Derived : Base
{
	public override void Display()
	{
		Console.WriteLine("This is Derived");
	}
}

В данном коде ошибки нет

Вопрос 4

Что будет выведено на консоль в результате выполнения следующей программы и почему?

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 не реализован.

Дополнительные материалы
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850