Różnica między throw a catch

0

Jaka jest różnica między throw i catch ? Jak używam catch to wykonywanie programu się kończy, natomiast przy catchu dalsza część programu się wykona. Czy są jeszcze jakieś różnice ?

0

throw "rzucasz" wyjątek, catch go "łapiesz" tak, aby program sam obsłużył błąd zamiast wywalać aplikację.

Dla przykładu otwieranie plików:

FileStream file;
try
{
	// Tu kod który może wywalić wyjątek
	file = File.Open("[Ścieżka Do Pliku]", FileMode.Open)
	// W tym momencie, gdy plik nie istnieje metoda Open z klasy File robi
	// throw IOException z odpowiednimi kodami, wiadomościami itp.
}
catch (IOException ex) // A tu obsługujemy wyjątek
{
	MessageBox.Show("Błąd: " + ex.Message);
}
0

Różnica jest jak katapulta a spadochron z miejscem do lądowania.
Spróbuj wyrzucić wyjątek i go nie łap;)

W ramach nauki wyrzucić wyjątek, zrób jeden lub kilka rethrow i obsłuż wyżej.

P

0

Throw i catch służą do obsługi wyjątków. Wyjątek - czyli wyjątkowa sytuacja, coś, czego program się nie spodziewał. Np. będziesz chciał zapisać plik na dysku, ale okaże się, że nie masz uprawnień do takiego zapisu.

Teraz tak. Jeśli pytasz użytkownika o wiek, a on Ci napisze: "dwadzieścia dwa" albo "Krzysztof Ibisz", to można to potraktować jako wyjątkową sytuację, ale nie do końca. Bo w tym momencie możesz sprawdzić, czy użytkownik podał sensowną liczbę, czy nie. Po prostu za pomocą if. I jeśli Ci wyjdzie, że użytkownik wpisał głupoty, to po prostu pytasz go jeszcze raz. Czyli w tym przypadku wiesz, co zrobić, gdy dostaniesz dane, których się nie spodziewasz - pytasz jeszcze raz. Ale są sytuacje, w których nie wiesz, co zrobić dalej. Wtedy rzucasz wyjątek za pomocą throw.

Gdzieś w aplikacji powinieneś ten wyjątek łapać - za pomocą catch. Tak jak pokazał atmal.

1 użytkowników online, w tym zalogowanych: 0, gości: 1