Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otvety_na_bilety_YaP_1-21_23.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
722.66 Кб
Скачать

Свойства

C# --- Руководство по C# --- Свойства

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

Свойства очень похожи на индексаторы. В частности, свойство состоит из имени и аксессоров get и set. Аксессоры служат для получения и установки значения переменной. Главное преимущество свойства заключается в том, что его имя может быть использовано в выражениях и операторах присваивания аналогично имени обычной переменной, но в действительности при обращении к свойству по имени автоматически вызываются его аксессоры get и set. Аналогичным образом используются аксессоры get и set индексатора.

Ниже приведена общая форма свойства:

тип имя {

get {

// код аксессора для чтения из поля

}

set {

// код аксессора для записи в поле

}

где тип обозначает конкретный тип свойства, например int, а имя — присваиваемое свойству имя. Как только свойство будет определено, любое обращение к свойству по имени приведет к автоматическому вызову соответствующего аксессора. Кроме того, аксессор set принимает неявный параметр value, который содержит значение, присваиваемое свойству.

Следует, однако, иметь в виду, что свойства не определяют место в памяти для хранения полей, а лишь управляют доступом к полям. Это означает, что само свойство не предоставляет поле, и поэтому поле должно быть определено независимо от свойства.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

class UserInfo

{

int a;

string s = "Alex";

// Создадим свойство, управлющее

// доступом к переменной a

public int Age

{

get

{

if (a <= 0)

return 1;

return a;

}

set

{

a = value;

}

}

// Свойство только для чтения

// переменной s

// аксессор set отсутствует

public string Name

{

get

{

return s;

}

}

}

class Program

{

static void Main(string[] args)

{

UserInfo ui = new UserInfo();

// Доступ к закрытой переменной экземпляра только через свойство

ui.Age = 26;

// Переменная только для чтения

string myName = ui.Name;

Console.ReadLine();

}

}

}

Свойствам присущ ряд существенных ограничений:

  • Cвойство не определяет место для хранения данных, и поэтому не может быть передано методу в качестве параметра ref или out.

  • Cвойство не подлежит перегрузке. Наличие двух разных свойств с доступом к одной и той же переменной допускается, но это, скорее, исключение, чем правило.

  • Cвойство не должно изменять состояние базовой переменной при вызове аксессора get. И хотя это ограничительное правило не соблюдается компилятором, его нарушение считается семантической ошибкой. Действие аксессора get не должно носить характер вмешательства в функционирование переменной.

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