Помощь в учёбе, очень быстро...
Работаем вместе до победы

Наследование (inheritance). Компьютерные технологии (программирование на C#)

РефератПомощь в написанииУзнать стоимостьмоей работы

Теперь убедитесь, что конструктор базового класса вызывается всегда, когда вызывается конструктор наследника. С этой целью конструктор базового класса _1 (файл библиотеки LibCode) перепишите так, чтобы он имел вид. Смысл этого комментария в том, что базовым классом (или, предком) класса LibClasses._1 является класс object и его конструктор с тем же именем object вызывается каждый раз при вызове… Читать ещё >

Наследование (inheritance). Компьютерные технологии (программирование на C#) (реферат, курсовая, диплом, контрольная)

Вернемся к проекту MainExe, к описанию класса _2. В методе Main добавьте строку.

LibClasses._1.

В этой точке IntelliSense покажет список, состоящий из двух статических методов Equals и ReferenceEquals. Другими словами, класс LibClasses._1 содержит два статических метода с указанными именами. Но откуда эти методы? Ни один из них явно не описывался в классе LibClasses._1!

Замените добавленную строку другой.

string.

На этот раз IntelliSense покажет более длинный список статических членов класса System.String. Среди них есть те же два метода Equals и ReferenceEquals, что и у класса LibClasses._1.

Попробуйте еще строку.

double.

Теперь будет отображен список статических членов класса System. Double и в нем встретятся те же два метода Equals и ReferenceEquals.

Одним из важнейших качеств объектно-ориентированного подхода в программировании является способность классов наследовать код других классов. Класс-наследник (derived class) может наследовать любые члены класса-предка (base class) — методы, поля и т. д. Это означает, что класс-наследник использует наследуемые члены класса-предка, как свои собственные.

В языке C# каждый класс может иметь не более одного класса-предка. Но у класса-предка может быть свой предок и т. д. В основе всех классов, используемых в .NET, лежит один общий предок — класс System.Object. Прямым предком описанного нами класса LibClasses._1 является именно класс System.Object. Псевдонимом класса System. Object является служебное слово object.

Наследование и вызов конструктора Еще раз рассмотрим класс _2 и действие в нем оператора.

static LibClasses._1 inst1 = new LibClasses._1();

Установите каретку в область текста этого оператора. Дайте команду отладчика Run To Cursor (например, из контекстного меню). После того, как отладчик выделит строку с этим оператором, поместите указатель мышки на имя _1 конструктора класса LibClasses._1, стоящего после оператора new. Тогда получите информацию вида.

+LibClasses._1|LibClasses._1.

Указав на +, получите еще один комментарий.

base {object}|object.

Смысл этого комментария в том, что базовым классом (или, предком) класса LibClasses._1 является класс object и его конструктор с тем же именем object вызывается каждый раз при вызове конструктора LibClasses._1.

Чтобы убедиться в этом лишний раз, добавьте в пространстве имен LibClasses библиотечного файла LibCode новый класс _1Der с описанием.

public class _1Der: _1.

{.

}.

Это будет класс _1Der — наследник класса _1. Класс _1Der пуст. Но, по умолчанию, имеет конструктор с тем же именем и без параметров. Чтобы увидеть это, добавьте в классе _2 после строки.

static LibClasses._1 inst1 = new LibClasses._1();

строку.

static LibClasses._1Der inst_1Der = new LibClasses._1Der ();

Так будет описан и создан экземпляр класса _1Der, наследующего класс _1.

Установите каретку в область текста этого оператора. Дайте, как и раньше, команду отладчика Run To Cursor (из контекстного меню). После того, как отладчик выделит строку с этим оператором, поместите указатель мышки на имя _1Der конструктора класса LibClasses._1Der, стоящего после оператора new. Тогда получите информацию вида.

+LibClasses._1Der|LibClasses._1Der.

Указав на +, получите комментарий о базовом классе.

+base {LibClasses._1}|LibClasses._1.

Вновь указав на +, получите новый комментарий.

base {object}|object.

Теперь убедитесь, что конструктор базового класса вызывается всегда, когда вызывается конструктор наследника. С этой целью конструктор базового класса _1 (файл библиотеки LibCode) перепишите так, чтобы он имел вид.

public _1().

{.

System.Console.WriteLine («Base constructor»);

}.

После этого активизируйте проект. В черном окне дважды должна появиться строка Base constructor.

Это связано с тем, что конструктор класса _1 вызывается дважды — строкой кода.

static LibClasses._1 inst1 = new LibClasses._1();

в классе _2, и следующей за ней строкой кода.

static LibClasses._1Der inst_1Der = new LibClasses._1Der ();

Последняя строка создает экземпляр inst_1Der класса-наследника _1Der. Но при этом конструктор класса _1Der вызывает неявно конструктор своего предка, или базового класса _1. Проверьте ход выполнения кода с помощью команд отладчика Run To Cursor и Step Into.

Показать весь текст
Заполнить форму текущей работой