## Why is this an issue?

When optional parameter values are not passed to base method calls, the value passed in by the caller is ignored. This can cause the function to behave differently than expected, leading to errors and making the code difficult to debug.

## How to fix it

### Code examples

#### Noncompliant code example

    Public Class BaseClass
        Public Overridable Sub MyMethod(ByVal Optional i As Integer = 1)
            Console.WriteLine(i)
        End Sub
    End Class

    Public Class DerivedClass
        Inherits BaseClass

        Public Overrides Sub MyMethod(ByVal Optional i As Integer = 1)
            ' ...
            MyBase.MyMethod() ' Noncompliant: caller's value is ignored
        End Sub

        Private Shared Function Main(ByVal args As String()) As Integer
            Dim dc As DerivedClass = New DerivedClass()
            dc.MyMethod(12) ' prints 1
        End Function
    End Class

#### Compliant solution

    Public Class BaseClass
        Public Overridable Sub MyMethod(ByVal Optional i As Integer = 1)
            Console.WriteLine(i)
        End Sub
    End Class

    Public Class DerivedClass
        Inherits BaseClass

        Public Overrides Sub MyMethod(ByVal Optional i As Integer = 1)
            ' ...
            MyBase.MyMethod(i)
        End Sub

        Private Shared Function Main(ByVal args As String()) As Integer
            Dim dc As DerivedClass = New DerivedClass()
            dc.MyMethod(12) ' prints 12
        End Function
    End Class

## Resources

### Documentation

Microsoft Learn - Optional Arguments (Visual Basic)