- •1. Эволюция языков программирования. Что такое net?
- •Internet и появление языка Java.
- •2.Компоненты платформы net.
- •3.Модель выполнения приложения в среде .Net Framework. Промежуточный язык Microsoft (Microsoft Intermediate Language, msil). Сборки.
- •4. Обзор встроенных типов данных c#. Применение встроенной функциональности типов данных.
- •5.Операции ввода/вывода. Формат вывода. Пространство имён System. Класс System.Math.
- •6.Операции, операторы и выражения в c# .
- •Операторы
- •7. Массивы в c# (одномерные и двумерные). Класс System.Random, применение его методов для создания массива случайных чисел. Класс System.Array, использование его методов и свойства Length.
- •8. Структуры в c#, создание структуры.
- •9. Понятие объектно-ориентированного программирования.
- •10. Классы в c#. Члены класса: методы, поля, свойства и события. Форма определения класса.
- •11. Типы значений и ссылочные типы. Динамическое использование памяти: стеки и кучи. Упаковка и распаковка.
- •12. Конструкторы и деструкторы. Сборка «мусора».
- •13. Определение пользовательских методов класса. Модификаторы доступа к методам класса. Параметры методов класса, передача аргументов. Модификаторы ref, out, params параметров методов.
- •14. Возвращение методами объектов класса. Возвращение методами массивов.
- •15. Общие (статические) члены класса. Доступ к общим членам. Ограничения на static-методы.
- •Ограничения на static-методы.
- •16.Область видимости и время существования переменных. Преобразование и приведение типов.
- •17.Обработка исключительных ситуаций.
- •18.Перегрузка методов. Перегрузка конструкторов.
- •19.Перегрузка операторов. Перегрузка бинарных, унарных и операторов отношений.
- •20. Инкапсуляция и свойства. Формат записи свойств.
- •21.Индексаторы. Специальные приемы построения типов. Создание одномерного индексатора.
- •22.Создание двумерного индексатора.
- •23.Механизмы реализации инкапсуляции в c#.
- •24.Базовые классы и наследование. Доступы к членам классов.
- •25.Конструкторы и наследование.
- •26.Ссылки на базовый класс и объекты производных классов.
- •27.Виртуальные методы и их переопределение.
- •28.Использование абстрактных классов.
- •29.Механизмы реализации полиморфизма в c#.
- •30.Интерфейсы. Реализация интерфейсов. Стандартные интерфейсы среды .Net Framework.
- •31.Коллекции. Классы коллекций общего назначения.
- •32.Делегаты. Назначение делегатов. Многоадресатная передача.
- •33.События. Объявление и генерация событий. Реализация обработчиков событий
- •34.Обзор технологий программирования Windows-приложений.
- •35.Архитектура Windows Forms. Класс Form.
- •36.Элементы управления формы
19.Перегрузка операторов. Перегрузка бинарных, унарных и операторов отношений.
Перегрузка операторов. C# позволяет определить значение оператора относит. создаваемого класса. Этот пр-с наз. перегрузкой оператора. Перегружая оператор мы расширяем его использование для класса. Например: можно перезагрузить операции арифметических действий для класса Point «+» - векторное сложение, а «-»- векторное вычитание.
Перегрузку операторов можно расценивать как введение новой операции для класса и тогда экземпляры класса можно использовать в арифметических выражениях. Перегрузка операторов одно из самых мощных средств языков С++, С#.
Перегрузки операторов тесно связаны с перегрузкой методов. Для перегрузки операторов используется ключ. слово operator, позволяет сделать операторный метод, кот. определяет действие оператора, связанное с его классом. Можно перегружать унарные(операции с одним операндом) и бинарные операции (операции в которой участвует 2 операнда). Общий формат перегр.ун.опер-ра: public static тип возвр.знач operator <знак операции>(тип операнда) { //операция } Общий формат перегр.бин.опер-ра: public static тип возвр.знач operator <знак операции >(тип и имя операнда 1, тип и имя операнда 2) { //операция }
Подавляющее большинство языков программирования и Java перегрузку операторов не поддерживают требования обеспечить возможность перегрузки операторов нет и в CLS(Common Language Specification). Если в один проект собрать модули, напис. на разных языках, то перегрузка операторов не будет работать. Выход – каждому перегруженному оператору создать аналог. обычный метод. public static Point AddPoint (Point T1, Point T2)
{ return new Point (T1.x+T2.x, T1.y+T2.y); }
public static Point SSubtractPoints (T1.x+T2.x, T1.y+T2.y);
{ return new Point ( T1.x-T2.x, T1.y-T2.y); }
Перегрузка ун.опер-ров для Point: public static Point operator-(Point Ob) { return new Point(-Ob.x,Ob.y); в Main(): T2=-T2; T2.Show();
Перегрузка оператора сравнения.
Перегрузим метод System Object Equals(): public override bool Equals (object 0) { if ((Point)0).x = = this.x && ((Point)0).y = = this.y) return true;
else return false; } public override int GetflashCode()
{ return this toString().GetHashCode(); }
public static bool Operator = = (Point T1, Point T2)
{ return T1.Equals(T2); }
// перегрузка // public static bool Operator ! = (Point T1, Point T2)
{ return ! T1. Equals(T2); }
Опер-ры отношений объектов класса нужно перег-ть только парами: < и >, <= и >=, = и !=.
20. Инкапсуляция и свойства. Формат записи свойств.
Все объектно-ориентир.языки исп-т 3 базовых принципа объектно-ориентириентированного программирования:
-инкапсуляция- как данный язык скрывает внутренние особенности реализации объектов
-наследование- как данный язык обеспечивает возможность многократного использования программного кода
-полиморфизм- как данный язык позволяет интерпретировать родственные объекты унифицированным способом(это перегрузка методов и конструкторов, переопределение методов).
Одним из аспектов инкапсуляции является защита данных. Данные об объекте должны определяться как приватные (private). Это значит, что поля данных объекта (члены переменные класса) не должны быть непосредственно доступны из открытого интерфейса. Если пользователь объекта желает изменить сост.объекта, то он должен делать это косвенно, с помощью методов чтения (get()) и модификации (set()). Платформа .NET реализует принцип инкапсуляции на основе использования свойств. Свойства – специальный член класса, позволяющий получить доступ к полю данных об объекте. Для хранения свойств память не выдел. Свойства используются для инкапсуляции полей в классе, позволяя выполнять чтение и запись их значений. Свойство состоит из имени или двух блоков программного кода, называемых функциями доступа или аксессорами(для чтения - get(), для записи-set()). Имя свойства можно использовать в выражениях и в операторах присваивания как обычную переменную. Формат записи св-в: public тип_св-ва Имя_св-ва {get { // оператор чтения поля } set {// операторы модифик.поля } }
Аксессор set автоматически принимает параметр value, который содержит значение, присваиваемое свойству.
Можно создавать свойства, предназначенные только для чтения либо только для записи. Свойство не должно изменять состояние члена-переменных при вызове get-аксессоров, но компилятор не обнаружит изменения. Св-во нельзя передавать методу в качестве ref или out параметра, т.к. свойству память не выделяется. Св-ва нельзя перегружать, лучше написать новое. Можно создавать статические свойства. Преимущества св-в в том, что пользователи объекта получает возможность изменять внутренние данные и использовать свойства в выражениях.