Why is this an issue?
Properties provide a way to enforce encapsulation by providing public
, protected
or internal
methods that
give controlled access to private
fields. However in classes with multiple fields it is not unusual that cut and paste is used to quickly
create the needed properties, which can result in the wrong field being accessed by a getter or setter.
This rule raises an issue in any of these cases:
- A setter does not update the field with the corresponding name.
- A getter does not access the field with the corresponding name.
For simple properties it is better to use auto-implemented
properties (VB.NET 10.0 or later).
Field and property names are compared as case-insensitive. All underscore characters are ignored.
Noncompliant code example
Public Class Sample
Private _x As Integer
Private _y As Integer
Public Property Y As Integer
Get
Return _x ' Noncompliant: field '_y' is not used in the return value
End Get
Set(value As Integer)
_x = value ' Noncompliant: field '_y' is not updated
End Set
End Property
End Class
Compliant solution
Public Class Sample
Private _x As Integer
Private _y As Integer
Public Property Y As Integer
Get
Return _y
End Get
Set(value As Integer)
_y = value
End Set
End Property
End Class