C # частные свойства - они используются / имеют смысл? - PullRequest
4 голосов
/ 29 ноября 2011

Я начинаю как энтузиаст C #, и мне кажется, что свойства всегда должны быть открытыми. Частная собственность не имеет смысла. Будет ли это?

Будет ли это:

private string propertyOne {get; set;}

эквивалентно этому:

public string propertyOne {private get; private set;}

Ответы [ 4 ]

12 голосов
/ 29 ноября 2011

Да, частные свойства могут иметь смысл, особенно в тех случаях, когда у вас есть логика, которую вы хотите реализовать в методах получения / установки. Возможно, вы захотите, чтобы они были доступны только внутри класса (следовательно, они являются частными), но вы все равно хотите инкапсулировать логику получения / установки в одном месте.

Существует разница между двумя строками кода, которые вы напечатали. Кто-то, размышляющий над открытыми свойствами, не увидит первое, но увидит второе, даже если не сможет вызвать метод получения / установки.

4 голосов
/ 29 ноября 2011

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

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

Впрочем, обычные свойства можно увидеть с помощью частного установщика.

0 голосов
/ 29 ноября 2011

Да, эти два бита кода эквивалентны. Я никогда не создавал частную собственность с автоматическим получателем / установщиком. Не кажется очень полезным. Я использовал частные свойства с фактической реализацией для геттера. Частный метод get (или метод получения свойств) может быть полезен.

0 голосов
/ 29 ноября 2011

В вашем вопросе, да, последний будет равен первому по функциональности, но не имеет смысла реализовывать его как таковой.

Я склонен использовать

public string propertyOne {get; private  set;}

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

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

...