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

96) Перечислите бинарные операции, разрешенные к

К бинарным операциям, которые можно перегружать в языке С# относятся:

  • арифметические операции (+,-,*,/,%)

  • битовые (&, |, ^,<<,>>)

  • логические (= =,!=,>,<,>=,<=)

Синтаксис объявления перегруженной бинарной операции:

Public static тип_возвр_знач operator бинарная_операция (параметр1, параметр2),

где параметр – это класс, для которого перегружается данная операция, не обязательно 2 параметра будут экземплярами класса. Перегруженная бинарная операция может возвращать величину любого типа.

Например,

public static myclass operator +(myclass x, myclass y)

public static myclass operator +(myclass x,int y)

public static bool operator = =(myclass x,myclass y)

Операции сравнения (= =,!=,>,<,>=,<=) определяются только парами и обычно возвращают логическое значение. Перегрузка операций отношения будет иллюстрирована в следующей лекции с использованием интерфейсов.

98) Что такое IComparer? Опишите принцип работы

Во многих алгоритмах требуется выполнить сортировку по различным критериям. Для этого используется интерфейс IComparer. Данный интерфейс определен в пространстве имен System.Collections. Он также содержит один метод Compare(), возвращающий результат сравнения двух объектов, переданных ему в качестве параметров.

interface IComparer

{int Compare(object obj1,object obj2)}

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

99) Что такое клонирование объектов? Какие виды

Клонирование-создание копии объекта. Копия объекта называется клоном. При присваивании одного экземпляра другому копируется ссылка, а не сам объект. Если необходимо скопировать в другую область памяти поля объекта, можно воспользоваться методом MemberwiseClone(), который любой объект наследует от класса object. При этом объекты, на которые указывают поля объекта, в свою очередь являющиеся ссылками, не копируются. называется поверхностным клонированием. Для создания полностью независимых объектов необходимо глубокое копирование, когда в памяти создается дубликат всего дерева объектов, то есть объектов, на которые ссылаются поля объекта, поля полей, и т.д. Алгоритм глубокого копирования сложен, требует рекурсивного обхода всех ссылок объекта и отслеживания циклических зависимостей.

100) Что такое делегат?.

Делегат – особый вид класса, хранящий ссылки на методы.

Общий синтаксис объявления делегата:

[cпецификаторы] delegate тип возвращаемого значения метода имя делегата ([параметры]), где

delegate ключевое слово.

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

параметры – это необязательные параметры, которые будут присутствовать у функции, на которую ссылается делегат.

Примеры объявления делегата:

delegate void MyDelegate(string s);

105) Что такое сборка?.

Сборка – совокупность взаимосвязанных типов (классов, интерфейсов, структур, перечислений, делегатов и т.д.).

Сборка включает в себя:

  • Манифест;

  • Метаданные;

  • Код на языке IL;

  • Ресурсы.

107) Что такое собственная библиотека

Для того, чтобы создать собственную библиотеку необходимо выбрать файл проекта - шаблон ClassLibrary. Библиотека хранится в виде файла с расширением *.DLL. Для использования такой библиотеки необходимо создать собственный проект и включить в него с помощью команды Project->Add Reference файл собственной библиотеки с расширением dll.

Все классы, включенные в библиотеку, желательно объявлять с режимом доступа public.

108) Что такое рефлексия.

Рефлексия – это получение информации о всех типах в программе во время ее выполнения. Например, можно получить список всех классов, интерфейсов и т.д. в сборке используя класс System.Type и типы пространства имён System.Reflection.

109) Что такое атрибуты? Опишите виды атрибутов.

Атрибуты – это дополнительные сведения об элементах программы, включающие в себя такие метаданные сборки, которые можно извлекать во время выполнения программы. Атрибуты могут быть стандартными и пользовательскими. Все атрибуты описываются в квадратных скобках перед тем членом класса, к которому он относится. [Serializable]class Monster{…[NonSerialized]; string name;…}

Атрибут [Serializable] означает, что все экземпляры этого класса можно сохранять во внешней памяти, а поле name, помеченный атрибутом [NonSerialized] означает, что данное поле класса будет недоступно.

110) Что такое пространство имен?

Пространство имён – это хранилище типов, определяющее их область видимости. Пространство имён служит для:

  • логического группирования элементов программы, расположенных в различных файлах;

группирования имён, предоставляемых сборкой в пользование другим модулям

113) Что такое коллекция?

Такие коллекции – это уже готовые шаблоны для различных структур данных – стеков, очередей, списков, бинарных деревьев и т.д. Эти коллекции хранятся в пространстве имён System.Collections.Generic. List<T>

114) Что такое List <T>?

//объявление экземпляра коллекции List с параметром – типом данных – классом Monster

List<Monster> mas = new List<Monster>();

115) Перечислите виды параметризованных.

В примере программы считывается содержимое текстового файла, считанный текст разбивается на слова и подсчитывается количество повторений каждого слова в тексте.

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

116) Что такое класс-прототип

Язык С# позволяет создавать собственные классы-прототипы и их разновидности – интерфейсы, структуры, делегаты, события. Рассмотрим создание класса-прототипа на примере стека. Параметр типа данных, которые охраняться в стеке указывается угловых скобках после имени класса, а затем используется таким же образом, как и обычные типы.

117) Что такое обобщенные (параметризованные)

Существуют “стандартные” классы прототипы, которые называются параметризованными коллекциями. Такие коллекции – это уже готовые шаблоны для различных структур данных – стеков, очередей, списков, бинарных деревьев и т.д. Эти коллекции хранятся в пространстве имён System.Collections.Generic. Класс-прототип может содержать произвольное число параметров типа. Для каждого параметра можно задать ограничения, указывающие каким требованиям должен удовлетворять аргумент, соответствующий этому параметру. Например, можно указать, что это юудет тип, использующий некоторый интерфейс (см.пример программы, приведенной ниже). Ограничения задаются после ключевого слова where, например:public class Stack<T> where T:struct {…}Здесь задано ограничение, что класс стек может использовать элементы только значимого типа (типа структуры). Для ссылочного типанеобходимо использовать ключевое слово class. Указание в качетстве ограничений имени класса означает, что соответствующий параметр (аргумент) должен быть инициализирован или именем этого класса, либо его потомка.

118) Что такое ключевое слово where? Опишите.

Контекстное ключевое слово используется для предоставления особого значения в коде, но оно не является зарезервированным словом в C#.Некоторые контекстные ключевые слова, например partial и where, имеют особое значение в двух или более контекстах. Ограничения задаются после ключевого слова where, например:

public class Stack<T>

where T:struct {…}

Здесь задано ограничение, что класс стек может использовать элементы только значимого типа (типа структуры). Для ссылочного типанеобходимо использовать ключевое слово class.

119) Что такое обобщенные методы?

Существуют “стандартные” классы прототипы, которые называются параметризованными коллекциями. Такие коллекции – это уже готовые шаблоны для различных структур данных – стеков, очередей, списков, бинарных деревьев и т.д. Эти коллекции хранятся в пространстве имён System.Collections.Generic.

Во всех параметризованных коллекциях имеется так называемый параметр в качестве которого обычно выступает тип данных с которым работает эта коллекция.

В качестве примера рассмотрим параметризованную коллекцию List <T>, которая является двойником обычной коллекции (семейства) ArrayList.

. static void Sort<T>(ref T[] a) where T : IComparable<T>

120) Что такое static void Sort<T>(ref T[] a) where T :

Существуют “стандартные” классы прототипы, которые называются параметризованными коллекциями. Такие коллекции – это уже готовые шаблоны для различных структур данных – стеков, очередей, списков, бинарных деревьев и т.д. Эти коллекции хранятся в пространстве имён System.Collections.Generic.

Во всех параметризованных коллекциях имеется так называемый параметр в качестве которого обычно выступает тип данных с которым работает эта коллекция.

В качестве примера рассмотрим параметризованную коллекцию List <T>, которая является двойником обычной коллекции (семейства) ArrayList. Преимущества использования параметризованных классов и методов:

  • описывают способы хранения и алгоритмы обработки данных независимо от типов данных

  • выполняют контроль типов во время компиляции, а не исполнения программы

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

.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]