## Why is this an issue?

There are several compilations options available for Visual Basic source code and `Option Strict` defines compiler behavior for implicit data type conversions. Specifying `Option Strict Off` will allow:

- Implicit narrowing conversions
- Late binding
- Implicit typing that results in an `Object` type

This behavior can lead to unexpected runtime errors due to type mismatch or missing members.

`Option Strict` can be set in project properties or overridden in individual source files.

### Noncompliant code example

    Option Strict Off    ' Noncompliant

    Public Class KnownType

        Public ReadOnly Property Name As String

    End Class

    Public Module MainMod

        Public Function DoSomething(Arg) As String  ' Type for "Arg" argument is not defined.
            Dim Item As KnownType = Arg             ' Implicit narrowing conversion doesn't enforce "Arg" to be of type "KnownType"
            Return Arg.Title                        ' "Title" might not exist in "Arg"
        End Function

    End Module

### Compliant solution

    Option Strict On

    Public Class KnownType

        Public ReadOnly Property Name As String

    End Class

    Public Module MainMod

        Public Function DoSomething(Arg As KnownType) As String
            Dim Item As KnownType = Arg
            Return Arg.Name
        End Function

    End Module

## Resources

- Visual Basic documentation - Option Strict Statement