2012-01-25 2 views

ответ

0

Частный сеттер позволяет свойству быть установленным только внутри класса, в то время как геттер до сих пор публикует значение свойства публично.

6

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

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

2

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

1

Существует несколько причин использовать частный набор.

1) Если вы не используете поля подложки на всех, и хотите только для чтения автоматического свойства:

public class abc 
    { 
     public int MyProperty { get; private set; } 
    } 

2) Если вы хотите, чтобы сделать дополнительную работу, когда вы измените переменную внутри класса и хотите зафиксировать это в одном месте:

private string _name = string.Empty; 
public string Name 
{ 
    get { return _name; } 
    private set 
    { 
     TextInfo txtInfo = Thread.CurrentThread.CurrentCulture.TextInfo; 
     _name = txtInfo.ToTitleCase(value); 
    } 
} 

В целом, это, в общем, личное предпочтение. Насколько я знаю, нет причин для использования одного над другим.

1

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

public class Customer 
{  
    public Customer() 
    { 
     InstanceCount++; 
    } 

    //Helps retrieving the total number of Customers 
    public int InstanceCount { get; private set; } //Count should not be increased by the clients of this class rather should be increased in the constructor only 
} 

Другой преимущество в некоторых ситуациях заключается в том, что после предоставления частного набора вашей собственности вы можете дать метод Set для изменения значения свойства из внешнего мира, когда вы хотите сделать некоторые вычисления или проверки на полученное значение (что не является наилучшей практикой внутри аксессуаров свойств Set), а затем измените значение свойства следующим образом:

public class Customer 
{ 
    public string City { get; private set; } 

    public bool SetCity(string customerCity) 
    { 
     //validate that the customerCity is a valid USA city or else throw some business rule exception, and then call below code 
     City = customerCity 
    } 
} 
Смежные вопросы