Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ C#.docx
Скачиваний:
16
Добавлен:
20.11.2019
Размер:
1.85 Mб
Скачать

3.5. Свойства

Свойства – это обобщение понятия данных. Значения свойств можно вычислить на основе значений данных, а также через свойство можно присвоить значения данным. Часто свойство вычисляют на базе нескольких или даже целого множества данных (Например, свойство треугольника -периметр - можно вычислить, зная его стороны; свойство сумма элементов массива на основе . . . ). В таком случае, естественно, вопрос о вычислении данных на основе значения свойства бессмысленный, так как эта задача не решается однозначно.

Определение свойства:

Тип_данных_свойства имя_свойства

{

get {

//получение значения свойства

}

set {

// использование переданного значения свойства

} }

Пример на использование свойств.

namespace ConApp7

{

class Prop1

{

double[] mas;

double lim;

public Prop1()

{

int n;

Console.Write("Элементов ? ");

n = Convert.ToInt32(Console.ReadLine());

mas = new double[n];

for (int i = 0; i < n; i++)

{

Console.Write("Mas[" + i + "]=");

mas[i] = Convert.ToDouble(Console.ReadLine());

}

}

double sum()

{ // функция суммирования

double s=0;

for(int i=0;i<mas.Length;i++)

if(mas[i]>lim)s+=mas[i];

return s;

}

public double sum_prop

{ // свойство, значение которой вычисляется через функцию

get { if (sum() > 0) return sum(); else return -25; }

}

public double lim_prop

{ // свойство, представляющее поле данных

get { return lim; }

set { if (value > 0)lim = value; else lim = 0; }

}

}

class Program

{

static void Main(string[] args)

{

Prop1 pr2=new Prop1();

// обращение к свойству для присвоения значения

pr2.lim_prop = 23.5;

// обращения к совйствам для получения значения

Console.WriteLine("Сумма " + pr2.sum_prop);

Console.WriteLine("Граница " + pr2.lim_prop);

Console.ReadLine();

} } }

Возникает вопрос: в каких случаях целесообразно использовать свойства? В чем их преимущество по сравнению с прямым обращением к полям данных или к функциям? При присвоении значений полям через свойства можно выполнять проверку корректности новых значений. К свойствам, значения которых должны вычисляться, обращаться легче по сравнению с обращением к функциям (не надо заботиться об аргументах). Как видно даже из этого простейшего примера, алгоритм вычисления значения свойства может быть записан как в самом свойстве, так и в функции, к которой обращается свойство. Кроме того, методика объектно-ориентированного программирования не рекомендует прямые обращения к полям. Те поля, к которым необходимо прямое обращение и которые, таким образом входят в интерфейс класса, можно представить свойствами.

На использование свойств налагаются довольно серьезные ограниче­ния. Свойству не соответствует поле памяти, оно лишь представляет данные. Поэтому его нельзя передавать методу в качестве ref- или out-параметра. Свойство не должно изменять состояние базовой переменной при вызове get.

Помните, при работе с массивами мы использовали записи mas.Length и mas.GetLength(0). Теперь мы знаем, что первая из них является свойством класса «Массив», а вторая функцией из этого же класса.