В чем разница между публичной переменной и публичной собственностью в VB.NET? (Анализ кода VS2010, CA1051: Microsoft.Design) - PullRequest
3 голосов
/ 24 января 2012

При выполнении анализа кода в моем проекте я получаю следующее сообщение:

CA1051 : Microsoft.Design : Because field 'ClassName.VarName' is visible outside of its declaring type, change its accessibility to private and add a property, with the same accessibility as the field has currently, to provide access to it.

Чтобы решить эту проблему, я могу изменить следующую строку:

Public VarName As String

на это:

Public Property VarName As String

Я не понимаю, почему ключевое слово Property так важно в данном конкретном случае.Может ли кто-нибудь объяснить, почему изменение этого члена на Property имеет существенное значение для анализа кода?Я что-то не так делаю?

Ответы [ 4 ]

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

Использование свойства позволяет вам определять методы доступа для ваших переменных, а не делать их открытыми. Смотрите здесь для хорошего объяснения: http://msdn.microsoft.com/en-us/library/65zdfbdt%28v=vs.71%29.aspx

2 голосов
/ 24 января 2012

Инкапсуляция является важным принципом в OOD.Если вы выставляете своих участников другим (я знаю, я уже хихикаю), нет никакой гарантии, что вы сможете поддерживать надлежащее состояние.

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

2 голосов
/ 24 января 2012

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

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

1 голос
/ 24 января 2012

Public Property VarName As String объявляет свойство, обеспечивающее уровень инкапсуляции. Вы сможете получить доступ к закрытому члену этой переменной в вашем классе, используя _VarName.

Public VarName As String объявляет переменную, которая будет предоставлять только один открытый экземпляр этой переменной без инкапсуляции.

...