Un método no siempre se requiere para devolver un valor; en particular, también se permite salir arrojando una excepción (en cuyo caso no se devuelve ningún valor).
Editar: Específicamente, the rules for the body of a method que devuelve int
son:
- Todos
return
declaraciones en el método debe devolver una expresión convertible a int
- El extremo del bloque de método no debe ser alcanzable
En su ejemplo, el compilador puede demostrar que M2
siempre sale tirando , por lo que el final del bloque de método no es alcanzable (cumple la regla n. ° 2). Tampoco hay declaraciones return
, que también cumple con la regla n. ° 1. Por lo tanto, esta es una definición de método válida.
Por otro lado, M1
no cumple con la regla n. ° 2 por lo que no es legal.
Probablemente se deje engañar por el mensaje de error que no menciona lanzar, pero considere que en casi todos los casos los métodos con valores devueltos hacen return
en lugar de arrojar - el compilador simplemente dice que quiere que probablemente se olvidó de hacer.
Parece que no puedo encontrar en qué parte de la especificación C# se describe este proceso, ¿alguien puede señalarlo? – SWeko
@SWeko: lo rastreó. Aquí: http://msdn.microsoft.com/en-us/library/aa664437(VS.71).aspx (último párrafo). – Jon