No hay advertencia en VB.NET cuando la función no tiene retorno

Algunos comentarios sobre la pregunta de desbordamiento de pila¿Por qué el compilador de C # no impide que las propiedades se refieran a sí mismas? con respecto a las advertencias me hizo pensar en viejos problemas que siempre me engañaban cuando escribía más código VB.NET.

Uno de ellos fue el hecho de que el compilador no le advirtió si declaró una Función pero nunca hizo una declaración de Devolución explícita o asignó el nombre de la Función. Al ejecutar Visual Studio 2008, acabo de hacer un pequeño proyecto experimental, y parece que el comportamiento nunca se ha solucionado. Creé una aplicación de consola de Visual Basic, con el siguiente código:

Module MainModule

    Sub Main()

        Dim test As Boolean = TestWarning()

    End Sub

    Function TestWarning() As Boolean

        Console.WriteLine("There is no Return Statement")

    End Function

End Module

También entré en la Configuración del proyecto y volvíOn Option Strict yOption Explicit. También configuré las Configuraciones de advertencia para que "Función / Operador sin valor de retorno" esté configurado en Error.

Compilé el proyecto y no recibí ninguna advertencia ni error en la función TestWarning (). Este parece ser un gran lugar para poner una advertencia, ya que el valor predeterminado será False, y es posible que simplemente haya olvidado hacer una devolución. C # producirá un error sin una declaración de devolución. Pensé que VB.NET hizo lo mismo con la configuración "Función / Operador sin valor de retorno". ¿Es esto un error, o hay algo que me falta?

Experimentación adicional
Function TestWarning() As Boolean

    If DateTime.Now.DayOfWeek = DayOfWeek.Monday Then
        Return False
    Else
        Console.WriteLine("There is no Return Statement")
    End If

End Function

Si tengo un explícitoReturn en unIfy nada en elElse, tampoco hay advertencia o error. Simplemente tomará el valor predeterminado, aunque probablemente haya pretendido (a través del estilo de programación) tener un retorno explícito. En este caso, devolví explícitamenteFalse (que es el valor predeterminado para Boolean), por lo que es probable que haya sido un error oculto que debería haber devueltoTrue en elElse.

Respuestas a la pregunta(5)

Su respuesta a la pregunta