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



Вопрос 1

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 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(); } }

Варианты ответов (правильно может быть несколько вариантов):

a) Абстрактный класс не может наследоваться от неабстрактного

b) Абстрактный класс может содержать только абстрактные методы

c) Нельзя использовать конструктор абстрактного класса для создания объекта этого класса

d) Абстрактный класс не может переопределять виртуальные методы базового класса

Вопрос 2

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

Вопрос 3

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

1 2 3 4 5 6 7 8 9 10 11 abstract class Base { public abstract void Display(); } abstract class Derived : Base { public override void Display() { Console.WriteLine("This is Derived"); } }

Вопрос 4

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 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(); } }

 

Интерфейсы

Вопрос 1

Что неправильно в определении следующих интерфейсов:

1 2 3 4 5 6 7 8 public abstract interface IAction { void Move(); } internal interface IRunAction : IAction { void Run(); }

Варианты ответов (ответов может быть несколько):

a) Интерфейсы не могут иметь модификатор доступа internal

b) Интерфейсы не могут иметь модификатор abstract

c) Интерфейс IRunAction должен определить метод Move, так как базовый интерфейс IAction является абстрактным

d) От абстрактного интерфейса нельзя наследоваться

Вопрос 2

Дана следующая программа:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 using System;   namespace HelloApp { class Program { static void Main(string[] args) { IAction action = new RunAction(); action.Move();   Console.ReadKey(); } }   class RunAction : IRunAction { internal void Move() { Console.WriteLine("I am running"); } }   interface IAction { void Move(); } interface IRunAction : IAction { new void Move(); } }

Почему данная программа не скомпилируется?

Варианты ответов:

a) Потому что метод Move в IRunAction определен с ключевым словом new

b) Потому что в обоих интерфейсах определен метод Move, и программа не знает, какой именно из этих методов вызывать

c) Потому что метод Move в классе RunAction определен с модификатором internal

d) Потому что класс RunAction должен определить две реализации метода Move для каждого из интерфейсов

Вопрос 3

Класс Tester реализует интерфейсы IFoo и IBar:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 interface IFoo { void Execute(); } interface IBar { void Execute(); } class Tester : IFoo, IBar { public void Execute() { Console.WriteLine("Tester Executes"); } }

Метод Execute() какого именно интерфейса реализует класс Tester?

Вопрос 4

Класс Tester реализует интерфейсы IFoo и IBar:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 interface IFoo { void Execute(); } interface IBar { void Execute(); } class Tester : IFoo, IBar { void IFoo.Execute() { Console.WriteLine("IFoo Executes"); } void IBar.Execute() { Console.WriteLine("IBar Executes"); } }

Реализация метода Execute() из какого интерфейса будет вызвана в следующем коде:

1 2 Tester t = new Tester(); t.Execute();

 

Делегаты

Вопрос 1

Есть следующий делегат:

1 delegate int Operation (int val);

Какие из следующих методов соответствуют данному делегату:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 static void Method1(int x) { Console.WriteLine(x * x); } static int Method2(ref int x) { return x * x; } static int Method3(int x, int y) { return x * y; } static int Method4(int x, int y = 7) { return x * y; } static int Method5(out int x) { x = 7; return x * x; }

Вопрос 2

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class Program { delegate int Operation(int x, int y);   static void Main(string[] args) { Operation del = Add; del += Multiply;   int result = del(6, 5); Console.WriteLine(result); Console.Read(); } private static int Add(int x, int y) { return x + y; } private static int Multiply(int x, int y) { return x * y; } }

Вопрос 3

Какой будет консольный вывод при выполнении следующей программы:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 class Program { delegate void Message();   static void Main(string[] args) { Message mes1 = Hello; mes1 += HowAreYou; mes1 += Hello; mes1 += Hello; mes1 -= Hello; mes1();   Console.Read(); } private static void Hello() { Console.WriteLine("Hello"); } private static void HowAreYou() { Console.WriteLine("How are you?"); } }

Вопрос 4

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class Program { delegate void Message();   static void Main(string[] args) { Message mes = new Message(Hello); mes += Hi; mes -= Hello; mes -= Hi; mes(); Console.Read(); } private static void Hello() { Console.WriteLine("Hello"); } private static void Hi() { Console.WriteLine("Hi"); } }

 


Дата добавления: 2021-05-18; просмотров: 155; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!