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

14. Возвращение методами объектов класса. Возвращение методами массивов.

Возвращение методами объектов. Метод может возвращать данные любого типа, в том числе классового. Для этого внутри метода нужно создать объект, а в return – вернуть его. В простых методах объект создавать можно в return.

Public Point uvelich_tochka(int koef) { return new Point (x*koef, y*koef); } в Main() Point T5=T1.uvelich_tochka(3); T5.show();

Возвращение методами массивов. Так как в C# массивы реализованы как объекты класса System.Array, э.зн. метод может возвратить массив.

15. Общие (статические) члены класса. Доступ к общим членам. Ограничения на static-методы. Методы можно объявлять как статические с использованием ключ. слова static. Это нужно, когда требуется определить член класса, кот. будет исп-ся независимо от объекта этого класса. Можно создать член, кот.разрешено использовать без ссылки на конкр. экземпляр. С использованием ключ. слова static можно объявлять как методы, так и переменные (поля). Пример static- члена – это метод Main ( ), кот. должен быть вызван операционной системой в начале работы программы (без создания экземпляра). При использовании static – члена вне класса нужно указать Имя_класса.имя_ static- члена объект не нужно создавать. Стат.данные исп-ются всеми объектами того класса, в кот. они были определены. Инициализация static- переменной происх.при загрузке класса. Если инициализатор явно не указан, static- переменная, предназначенная для хранения числовых значений инициализируется 0; объектные ссылки – null- значениями, а переменные типа bool- значениями false. Различие между static и обычным методом сост.в том, что static – метод можно вызвать посредством имени класса, без необходимости создания объекта этого класса ( метод Sqrt класса Math). Ограничения на static-методы: static-метод не имеет ссылки this; static-метод может на прямую вызывать только другие static-методы: он не может вызывать метод экземпляра своего класса. ; static-метод имеет прямой доступ только к static-данным. Он не может напрямую использовать переменные экземпляров, так же как не работает с экземплярами класса. static-метод может вызывать методы экземпляров и получать доступ к переменным экземпляров своего класса через объект класса (т.е в Main() ) или внутри метода, у которого параметр - объект этого же класса. Чтобы создавать объекты классов, можно использовать статический метод, который будет возвращать объект класса. Стат.члены класса применяют при создании атрибутов. Атрибуты исп-тся для описания создаваемых типов ( например классов). Т.е атрибуты предоставляют описательную информацию.

16. Область видимости и время существования переменных. Преобразование и приведение типов. В C# разрешается объявлять переменные внутри фигурных скобок. Любой блок определяет область объявления, или область видимости объектов. Обл. видимости также определяет и время сущ-ния этих объектов. Важными явл.обл-ти видимости, кот.определены классом и методом. Область видимости, определяемая методом, начинается с {. При объявлении переменной внутри обл-ти видимости мы защищаем ее от неправомочного доступа. Эти правила обл-ти видимости обеспечивают основу для инкапсуляции. Обл-ти видимости могут быть вложенными. Переменные создаются после входа в обл. видимости, а разрушаются при выходе из нее. Э.з. что переем.не будет хранить значение за пределами обл. видимости. - время сущ-я переменной ограничивается ее областью видимости; - ни одна переем., объявленная во внутр. области видимости, не может иметь имя, совпад-е с именем переменной, объявленной во внешней области видимости. Преобразование типов. Часто возникает необх-сть переменной одного типа присвоить значение переменной другого типа. Преобразование между типами данных бывает двух видов: неявное и явное (автоматическое). Неявное преобразование – это преобр-е типов данных, кот. явно не задано и выполняется без спец. указанной команды, т.е такие преобр-я выполняются автомат. Автомат.преобр.будет вып., если: - оба типа совместимы, - тип переменной - приемника больше, чем тип источника. => вып-ся преобр-е с расширением, или расширяющее преобразование. Явное преобр-е – явно заданная инстр-я компилятору преобразовать один тип в другой. Инстр-я зап.так: (тип_приемника) выражение.

Если приведение приводит к сужающему преобр-ю, то возможна потеря инф-ции. Преобр.типов может встречаться и в выражениях. Преобр. типов вып.на основе правил продвижения по «типовой» лестнице.

17. Обработка исключительных ситуаций. В языке С# предусмотрена обработка ошибочных ситуаций, связанных с выполнением таких сист.действий как ввод/вывод через файлы. За обработку исключений отвечаеткласс ошибок System.Exseption. Для обработки исключений в соотв.методе класса или в Main() нужно оформить 2 блока:

Блок try { //оператор. Здесь может произойти ошибка! }

Блок catch (System.Exsception err) { //операторы. Выполняется перехват ошибок указанного типа }

При возникновении ошибки внутри блока try проверяется какой тип ошибок перехватывает блок catsh. Если тип ошибок, указанный в блоке catch, не соотв.типу возн-шей ошибки, пр-ма заверш.автомат. Объектная переем.err имеет неск.полезных св-в, кот.доступны в приложении: Uessage – содержит текст ошибки; targetSite – сод.имя метода, вызвавшего ошибку; Sounce – сод.имя прилож., вызв-го.ошибку. Иногда блок catch оформл.кратко: catch(Exsception err) { C.Wr.(err.Message); C.RL(); }

18.Перегрузка методов. Перегрузка конструкторов. В C# методы внутри одного класса могут иметь одинаковое имя при условии, что их параметры будут разл.. Такую ситуацию наз. перегрузкой методов, а методы – перегруженными. Перегрузка методов – один их способов реализации полиморфизма в C#. Все перегруженные методы должны иметь списки параметров, которые отличаются по типу и/или количеству. Методам для перегрузки недостаточно отличаться лишь типами возвращаемых значений, может произойти автоматическое преобразование типов. Они должны отличаться типами или числом параметров. При вызове перегруженного метода выполняется та его версия, параметры которой совпадают (по типу и /или количеству) с заданными аргументами. Перегрузка методов нужно тогда, когда нужно реализовать один и тот же метод для различных типов данных, чтобы не плодить имена. Перегрузка упрощает процесс программирования. Следует отметить, что params-параметр не является определяющим фактором отличия перегруженного метода от другого (ведь можно и 0 аргументов через params передать). Тип возврата значения и params – это не факторы перегруженного метода. Конструкторы тоже можно перегружать. Это позволяет создавать объекты разл.способами. Перегр-я констр-ры предоставл.опред. гибкость в выборе способов создания объектов. Одна из распр.причин перегр-ки – возм-сть инициализации одного объекта с пом.др. констры, в кот.созд.объект инициализируется объектом-параметром, наз.констр-ром копирования. Class Stac { //члены-перем.: //char[] mas; //массив для хранения данных стека int tos; }

19. Перегрузка операторов. Перегрузка бинарных, унарных и операторов отношений. Перегрузка операторов. C# позволяет определить значение оператора относит. создаваемого класса. Этот пр-с наз. перегрузкой оператора. Перегружая оператор мы расширяем его использование для класса. Перегрузки операторов тесно связаны с перегрузкой методов. Для перегрузки операторов исп-тся ключ. слово operator, позвол-е сделать операторный метод, кот. определяет действие оператора, связанное с его классом. Можно перегружать унарные и бинарные операции. Общий формат перегр.ун.опер-ра: public static тип возвр.знач operator <знак операции>(тип операнда) { //операция } Общий формат перегр.бин.опер-ра: public static тип возвр.знач operator <знак операции >(тип и имя операнда 1, тип и имя операнда 2) { //операция }

Если в один проект собрать модули, напис. на разных языках, то перегрузка операторов не будет работать. Выход – каждому перегруженному оператору создать аналог. обычный метод. 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 реализует пр-п инкапсуляции на основе использования св-в. Св-ва – спец.член класса, позволяющий получить доступ к полю данных об объекте. Для хранения св-в память не выдел. Св-ва исп.для инкапс.полей в классе, позволяя выполнять чтение и запись их значений. Св-во сост.из имени или двух блоков прогр-го кода, наз-мых ф-ми доступа или аксессорами. Имя св-ва можно использовать в выражениях и в операторах присваивания как обычную перем. Формат записи св-в: public тип_св-ва Имя_св-ва {get { // оператор чтения поля } set {// операторы модифик.поля } } аксессор set автомат.принимает параметр value, кот.содержит значение, присваиваемое св-ву. Можно присваивать св-ва, предназн.только для чтения либо только для записи. Св-во не должно изменять состояние члена-перем.при вызове get-аксессоров, но компилятор не обнаружит изменения. Св-во нельзя передавать методу в качестве ref или out параметра. Св-ва нельзя перегружать. Можно создавать стат.св-во. Преим-ва св-в в том, что пользователи объекта получ.возм-сть изменять внутр.данные и использовать св-ва в выражениях.

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