Вы не должны бросать ни одно исключение. Вы объявили этот метод:
public bool TryBefriend(Ook o0k)
В нем говорится, что этот метод ожидает аргумент типа Ook
. Если кто-то передает аргумент этого типа или одного из его подклассов, и он компилируется, то было бы нехорошо выдать им ошибку времени выполнения и сказать, по сути: «Нет, не тот тип. Я действительно имел в виду это». тип и этот тип, но не тот. "
Если возможно попытаться подружиться с чем-то, но в результате это может или не может быть успешным, то попытка не должна вызывать исключение. Мы не должны использовать исключения как способ управления нормальным, предсказуемым потоком программ.
Думайте об этом, как о попытке вывести деньги из банка. Если вы попытаетесь снять 1000 долларов, вы должны получить сообщение о том, что это удалось или что не удалось, потому что у вас нет 1000 долларов. Он не должен возвращать успех, если у вас достаточно денег, или выкидывать исключение, если у вас его нет. Недостаток денег - нормальная, предсказуемая возможность. Если, с другой стороны, приложение не может продолжить работу, поскольку оно потеряло соединение с базой данных и восстановить его невозможно, тогда было бы целесообразно создать исключение.
Так что я просто вернул бы true
или false
, и тогда вызывающий абонент может решить, что делать, основываясь на ответе. Вы увидите это, что имеет смысл:
if(someOok.TryBefriend(someOtherOook))
{
// friends!
}
else
{
// not friends!
}
... и не это, что неудобно:
try
{
someOok.TryBefriend(someOtherOook);
// friends!
}
catch(NotSupportedException ex)
{
// not friends!
}