Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тюмгу / Лекции КБ ИБАС 1 курс 2 семестр / лекция10 Безопасность 2018.pptx
Скачиваний:
12
Добавлен:
08.12.2019
Размер:
149.27 Кб
Скачать

Файл Class1.cs:

using System;

namespace ConsoleApplication2

{

class Class1

{

static void Main(string[ ] args)

{

ClassDate myDate = new ClassDate();

Console.WriteLine("default date: " +

myDate.GetMonth()+" "+myDate.GetYear());

ClassDate demoDate = new ClassDate (4, 2014);

12

Console.WriteLine("demo date: " + demoDate.GetMonth()+" " +demoDate.GetYear());

ClassDate sumDate;

int m=13;

sumDate = myDate+demoDate;

Console.WriteLine("sum date: " + sumDate.GetMonth()+" " +sumDate.GetYear());

sumDate = myDate+m;

Console.WriteLine("sum date: " + sumDate.GetMonth()+" " +sumDate.GetYear());

sumDate = m+myDate;

Console.WriteLine("sum date: " + sumDate.GetMonth()+" " +sumDate.GetYear());

}

}

}

13

Свойства

Это особая характеристика, позволяющая скрыть за простым синтаксисом обращение к методам объекта.

В соответствии с принципом инкапсуляции переменные экземпляра должны быть закрыты – их объявляют с уровнем доступа private.

Для считывания и изменения этих переменных используются специальные методы get и set, соответственно называемые

аксессор (англ. access – доступ)

мутатор (англ. mutation – изменение).

Вместо использования этих методов применяют свойства.

В программе (вне класса) они выступают подобно переменным экземпляра (внутри класса),

в упрощенном синтаксисе их можно подставлять в выражения, присваивать им значения и т.п.

14

Синтаксис определения свойства

Определяя свойство, нужно показать,

каким методам оно соответствует.

access prop_type prop_name

{

get

{

statements

}

set

{

statements

}

}

15

access – уровень доступа (обычно выбирается public),

prop_type - тип,

prop_name - имя свойства.

Блок get должен обязательно содержать оператор

return expr, возвращающий значение свойства.

Блок set для передачи свойству значения использует предопределенный параметр value.

Правила использования свойств

Тип выражения expr должен совпадать с типом свойства prop_type.

Тип выражения, значение которого присваивается параметру value, должен совпадать с типом свойства prop_type.

16

В определении свойства могут присутствовать

оба блока или

только один из них (свойство для чтения, свойство для записи).

Свойства нельзя передавать методам в качестве параметров ref и out.

Свойство не может быть перегружено.

Свойство не должно изменять значение соответствующей ему переменной в блоке get.

17

Если свойство поставлено в

соответствие некоторой

переменной экземпляра,

то при выборе идентификаторов

рекомендуют придерживаться

следующего правила (Microsoft):

Первая буква идентификатора переменной всегда строчная.

Идентификатор свойства совпадает с идентификатором переменной, но первая буква – прописная.

18

Простой пример определения свойства.

class SimpleProp

{

private int xValue; // переменная экземпляра

public SimpleProp () { xValue = 0;}

public int XValue // свойство

{

get // возвращает значение переменной

{

return xValue;

}

set

//переменной можно присваивать только значения >0

{

if (value >=0) xValue = value;

}

}

}

19

Использование свойства :

class TestProp

{

public static void Main ()

{

SimpleProp obj = new SimpleProp ();

Console.WriteLine (“начальное значение: “+ obj.XValue);

obj.XValue = 1;

Console.WriteLine (“новое значение: “+ obj.XValue);

obj.XValue = -1;

Console.WriteLine (“новое значение: “+ obj.XValue);

}

}

20

Индексаторы

В С# не допускается перегрузка оператора [ ] – взятия элемента массива по заданному индексу.

Например, создан класс векторов.

в числе переменных экземпляра будет массив координат вектора,

операция индексации применима именно к этому массиву, а не сразу к объекту.

Проблему можно решить, создав индексатор.

Тогда к элементу массива, содержащемуся в объекте, можно обращаться, указывая не имя массива, а имя объекта.

Кроме того, с помощью индексатора можно создать имитацию массива.

21