В C # вам разрешено иметь геттеры и сеттеры с уровнями доступа (см. модификаторы доступа ), отличными от общего свойства. Это самая распространенная модель
public class FooObject
{
public String Foo
{
get;
private set;
}
}
Это позволяет объектам, создающим экземпляр FooObject, получать значение Foo, но не устанавливать его значение. Частный модификатор в сеттере означает, что только FooObject имеет эту возможность (не включая использование отражения).
У этого есть два преимущества:
С добавлением автоматических свойств (переменные не требуются для присваивания значений get и set), это позволяет выполнять частную настройку переменной свойства (она создается для вас во время компиляции) без необходимости явно создайте переменную. Без этого вы не сможете использовать автоматическое свойство, если вы не хотите, чтобы функция get и set была общедоступной, частной и т. Д.
Он допускает уровень абстракции, так что все методы, будь то public, private или иным образом, проходят через свойство и не имеют прямого доступа к закрытой переменной. См. Этот вопрос для получения дополнительной информации.
В вашем экземпляре другие объекты могут устанавливать значение фабричной сессии, но только классы, которые наследуют его, могут извлечь его. В большинстве случаев, если объект может установить значение, он также может получить его, но есть случаи, когда было бы полезно не допустить его. Это разрешено, поскольку заданное событие не разрешает больший объем доступа, чем было определено для общего свойства.
Лучший пример, который я могу придумать, - это если в заданном событии заданный объект был изменен. Например, если событие set устанавливало объект подключения, а в событии setting добавлялась строка подключения и было открыто подключение к базе данных (в моем примере я, вероятно, реорганизовал бы код, чтобы он не действовал таким образом). , но что-то подобное может возникнуть).