Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теоретический_курс.doc
Скачиваний:
37
Добавлен:
10.11.2019
Размер:
7.68 Mб
Скачать

3.7.6. Свойство: модификаторы доступа в аксессорах Свойство: модификаторы доступа в аксессорах

По умолчанию доступность методов свойств («аксессоров») set и get оказывается такой же, как и у индексатора и свойства, частью которых они являются. Так, если свойство объявляется как public, то по умолчанию его set и get также становятся открытыми (public). Тем не менее для set или get можно указать собственный модификатор доступа, например private. Но в любом случае доступность методов свойства, определяемая таким модификатором, должна быть более ограниченной, чем доступность, указываемая для его свойства или индексатора.

Существует целый ряд причин, по которым требуется ограничить доступность метода свойства. Допустим, что требуется предоставить свободный доступ к значению свойства, но вместе с тем дать возможность устанавливать это свойство только членам его класса. Для этого достаточно объявить аксессор данного свойства как private.

Вышесказанное иллюстрирует нижеследующее:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace LC_Console

{

class UserInfo

{

int age;

public int Age

{

get

{

return age;

}

// Ввод закрыт вне класса

private set

{

age = value;

}

}

public int myAge()

{

// Внутри класса доступ открыт

Age = 26;

return Age;

}

}

class Program

{

static void Main(string[] args)

{

UserInfo ui = new UserInfo();

// Для чтения доступ открыт вне класса

Console.WriteLine(ui.Age);

Console.WriteLine(ui.myAge());

/*

* Так нельзя:

* ui.Age = 26;

* UserInfo ui1 = new UserInfo{ Age = 26 };

*/

Console.WriteLine("Для продолжения нажмите любую клавишу . . .");

Console.ReadKey();

}

}

}

/* Выведет:

* 0

* 26

* Для продолжения нажмите любую клавишу . . .

*/

Вероятно, ограничение доступа к аксессорам свойств оказывается наиболее важным для работы с автоматически реализуемыми свойствами. Создать автоматически реализуемое свойство только для чтения или же только для записи нельзя, поскольку оба get и set, должны быть указаны при объявлении такого свойства. Тем не менее, добиться желаемого результата все же можно, объявив один из аксессоров свойств автоматически реализуемого свойства как private.

На применение модификаторов доступа в аксессорах свойств накладываются следующие ограничения:

  • Действию модификатора доступа подлежит только один: set или get, но не оба сразу.

  • Модификатор должен обеспечивать более ограниченный доступ к аксессору свойства, чем доступ на уровне свойства или индексатора.

  • Модификатор доступа нельзя использовать при объявлении аксессора свойства в интерфейсе или же при реализации аксессора свойства, указываемого в интерфейсе.