Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
госы_шпоры.doc
Скачиваний:
51
Добавлен:
17.08.2019
Размер:
436.22 Кб
Скачать

Объектно-ориентированное программирование (Язык c#) - копипаста с выложенного на форум архива

 

1.     Что является точкой входа в программу на языке C#?

 

Статическая процедура Main().

//Класс, содержащий статическую процедуру с именем Main.

 

2.     Что отличает консольное приложение на языке C# от приложения Windows Forms?

 

Отсутствие гуя (GUI – graphic user interface, графическая пользовательская интырьморда)

 

3.     Какое имя логического типа данных может использоваться в программах C#?

 

Имя типа – bool

Системный тип – System.Boolean

 

4.     Что возвращает оператор new в языке C#?

 

Оператор new динамически распределяет память для объекта и затем возвращает ссылку на этот объект.

 

5.     Что означает ключевое слово this в языке C#?

 

Ключевое слово this ссылается на текущий экземпляр класса, а также используется в качестве модификатора первого параметра метода расширения.

 

6.     Каким будет значение p1.X после выполнения следующего кода C#?

Point p1 =   new   Point (10,10);

Point p2  = p1;

p2.X =26;

 

p1.X=10

 

7.     Каким действием можно освободить память приложения от конкретного экземпляра класса C#?

 

Подозреваю, что методом Dispose()

 

8.     Каким образом можно передать аргументы x, y из конструктора конструктору базового класса в С#?

 

Передача аргументов конструктору базового класса выполняется с использованием ключевого слова base. Пример:

 

public Rect(Point point1, Point point2) : base(point1, point2) {}

 

9.     Какой оператор цикла отсутствует в языке С#?

 

В C# присутствуют операторы цикла for, foreach, while.

 

 

10.  Какое отличие структуры от класса в С#?

 

Структура - это частный случай класса. Исторически структуры используются в языках программирования раньше классов. В языках PL/1, C и Pascal они представляли собой только совокупность данных (полей класса), но не включали ни методов, ни событий. В языке С++ возможности структур были существенно расширены и они стали настоящими классами, хотя и c некоторыми ограничениями. В языке C# - наследнике С++ - сохранен именно такой подход к структурам.

 

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

  • если необходимо отнести класс к развернутому типу (Класс T относится к развернутому типу, если память отводится сущности x; объект разворачивается на памяти, жестко связанной с сущностью), делайте его структурой;

  • если у класса число полей относительно невелико, а число возможных объектов относительно велико, делайте его структурой. В этом случае память объектам будет отводиться в стеке, не будут создаваться лишние ссылки, что позволит повысить эффективность работы;

  • в остальных случаях проектируйте настоящие классы.

 

Поскольку на структуры накладываются дополнительные ограничения, то может возникнуть необходимость в компромиссе - согласиться с ограничениями и использовать структуру либо пожертвовать развернутостью и эффективностью и работать с настоящим классом. Стоит отметить: когда говорится, что все встроенные типы - int и другие - представляют собой классы, то, на самом деле, речь идет о классах, реализованных в виде структур.

Перечислим ограничения, накладываемые на структуры.

  • Самое серьезное ограничение связано с ограничением наследования. У структуры не может быть наследников. У структуры не может быть задан родительский класс или родительская структура. Конечно, всякая структура, как и любой класс в C#, является наследником класса Object, наследуя все свойства и методы этого класса. Структура может быть наследником одного или нескольких интерфейсов, реализуя методы этих интерфейсов.

  • Второе серьезное ограничение связано с процессом создания объектов. Пусть T - структура, и дано объявление без инициализации - T x. Это объявление корректно, в результате будет создан объект без явного вызова операции new. Сущности x будет отведена память, и на этой памяти будет развернут объект. Но поля объекта не будут инициализированы и, следовательно, не будут доступны для использования в вычислениях. Об этих особенностях подробно говорилось при рассмотрении значимых типов. В этом отношении все, что верно для типа int, верно и для всех структур.

  • Если при объявлении класса его поля можно инициализировать, что найдет отражение при работе конструктора класса, то поля структуры не могут быть инициализированы.

  • Конструктор по умолчанию у структур имеется, при его вызове поля инициализируются значениями по умолчанию. Этот конструктор нельзя заменить, создав собственный конструктор без аргументов.

  • В конструкторе нельзя вызывать методы класса. Поля структуры должны быть проинициализированы до вызова методов.

 

Вариант. Структура в C# отличается от класса тем, что не имеет референциальной семантики.

 

11.  Сколько аргументов должен получать конструктор структуры языка С#?

 

Столько, сколько полей в структуре, потому что он инициализирует их значениями по умолчанию.

 

12.  Какое выражение создаёт экземпляр (объект) класса X на языке C#?

 

X var = new X (…);

 

13.  Каков размер переменной типа float в языке C#?

 

Имя типа

Системный тип

Диапазон

Точность

Float

System.Single

32 бита (+1.5*10-45 - +3.4*1038  )

7 значащих цифр

14.  Какой метод не входит в состав класса object в языке C#?

 

Методы класса Object:

Equals

Finalize

GetHashCode

GetType

MemberwiseClone

ReferenceEquals

ToString

 

15.  Каков доступ по умолчанию к полям структуры (struct) в языке C#?

 

Общедоступный (public)

 

16.  Для чего не используется ключевое слово this в языке C#?

 

Используется оно:

Для квалификации элементов, скрытых одинаковыми именами

Для передачи другим методам объекта в качестве параметра

Для объявления индексаторов

 

И см. вопрос 5.

 

 

17.  С помощью какого модификатора в языке C# можно переопределить виртуальную функцию в производном классе?

 

override

 

18.  Какое свойство характеризует абстрактный класс в языке C#?

 

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

 

Абстрактный класс в объектно-ориентированном программировании — класс, содержащий хотя бы один абстрактный метод. Абстрактный метод не реализуется для класса, в котором описан, однако должен быть реализован для его неабстрактных потомков. Абстрактные классы представляют собой наиболее общие абстракции, такие что имеют бо́льший объем и меньшее содержание.