Недвижимость и частный набор - PullRequest
0 голосов
/ 15 января 2012

Почему этот код не работает?

class Test
{
    int Abc { private set; get; }
}

Что такое модификатор доступа по умолчанию для свойств?

Ответы [ 3 ]

4 голосов
/ 15 января 2012

Свойство Abc должно быть открытым, защищенным или внутренним:

public int Abc { get; private set; }

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

3 голосов
/ 15 января 2012

Доступность по умолчанию для всех членов класса (включая свойства): private; см. Уровни доступности . private перед вашим set является избыточным, таким образом, ошибка. Ваш код будет семантически эквивалентен следующему:

class Test
{
    int Abc { get; set; }
}

Вам нужно указать private модификатор доступа для вашего set аксессора, когда свойство более доступно; например (общий сценарий):

class Test
{
    public int Abc { get; private set; }
}
3 голосов
/ 15 января 2012

Модификатор доступа по умолчанию для свойств является закрытым, как и для любого другого члена класса. Если вы хотите сделать установщик менее доступным, вам нужно сначала сделать свойство более доступным, а затем наложить ограничение на установщик.

class Test
{
    public int Abc1 { private set; get; }
    protected  int Abc2 { private set; get; }
    internal int Abc3 { private set; get; }
    protected internal int Abc4 { private set; get; }
}
...