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:

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