Sposób nie zawsze jest wymagane, aby powrócić do wartości; w szczególności dozwolone jest również wyjście przez zgłoszenie wyjątku (w takim przypadku nie zwracana jest żadna wartość).
Edit: szczególności the rules for the body of a method która zwraca int
są:
- Wszystkie dane przedstawione w metodzie
return
musi powrócić wyrażenie zamienny do int
- Koniec bloku metoda nie musi być osiągalny
W twoim przykładzie kompilator może udowodnić, że M2
zawsze wychodzi przez rzucanie , więc koniec bloku metod nie jest osiągalny (spełnia regułę nr 2). Nie ma też żadnych instrukcji, które również spełniają regułę nr 1. Dlatego jest to poprawna definicja metody.
Z drugiej strony M1
nie spełnia zasady nr 2, więc nie jest legalne.
Prawdopodobnie zostałeś wprowadzony w błąd przez komunikat o błędzie, który w ogóle nie wspomina o rzucaniu, ale weź prawie we wszystkich przypadkach metody z wartościami zwracanymi mają wartość return
zamiast rzucania - kompilator po prostu mówi, że prawdopodobnie zapomniałeś.
Nie mogę znaleźć, gdzie w specyfikacji C# ten proces jest opisany, czy ktoś może to wskazać? – SWeko
@SWeko: Śledziłem to. Tutaj: http://msdn.microsoft.com/en-us/library/aa664437 (VS.71).aspx (ostatni akapit). – Jon