Что это значит? [C #] - PullRequest
       60

Что это значит? [C #]

4 голосов
/ 17 апреля 2010

Если мы определим свойство как public свойство и в этом свойстве у нас будет protected геттер. что это значит? если свойство является публичным, что означает определение защищенного геттера для этого? пожалуйста, смотрите ниже код:

    public ISessionFactory SessionFactory
    {
        protected get { return sessionFactory; }
        set { sessionFactory = value; }
    }

Ответы [ 4 ]

11 голосов
/ 17 апреля 2010

Это означает, что геттер может быть вызван только подклассами. «Защищенный» перед получателем, так сказать, перезаписывает «открытый» для получающей части свойства.

2 голосов
/ 17 апреля 2010

В C # вам разрешено иметь геттеры и сеттеры с уровнями доступа (см. модификаторы доступа ), отличными от общего свойства. Это самая распространенная модель

public class FooObject
{
    public String Foo 
    {
      get;
      private set;
    }
}

Это позволяет объектам, создающим экземпляр FooObject, получать значение Foo, но не устанавливать его значение. Частный модификатор в сеттере означает, что только FooObject имеет эту возможность (не включая использование отражения).

У этого есть два преимущества:

  1. С добавлением автоматических свойств (переменные не требуются для присваивания значений get и set), это позволяет выполнять частную настройку переменной свойства (она создается для вас во время компиляции) без необходимости явно создайте переменную. Без этого вы не сможете использовать автоматическое свойство, если вы не хотите, чтобы функция get и set была общедоступной, частной и т. Д.

  2. Он допускает уровень абстракции, так что все методы, будь то public, private или иным образом, проходят через свойство и не имеют прямого доступа к закрытой переменной. См. Этот вопрос для получения дополнительной информации.

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

Лучший пример, который я могу придумать, - это если в заданном событии заданный объект был изменен. Например, если событие set устанавливало объект подключения, а в событии setting добавлялась строка подключения и было открыто подключение к базе данных (в моем примере я, вероятно, реорганизовал бы код, чтобы он не действовал таким образом). , но что-то подобное может возникнуть).

0 голосов
/ 17 апреля 2010

Защищенный метод get означает, что метод получения этого свойства доступен только из унаследованного класса этого класса. набор считается общедоступным, поэтому это свойство может быть установлено публично.

0 голосов
/ 17 апреля 2010

Защищенное ключевое слово является модификатором доступа члена. Защищенный член доступен из класса, в котором он объявлен, и из любого класса, производного от класса, который объявил этот член.

http://msdn.microsoft.com/en-us/library/bcd5672a(VS.71).aspx

...