Это действительно, действительно вызывает меня, поэтому я надеюсь, что кто-то может дать мне разумное обоснование, почему все так, как есть.
NotImplementedException. Вы тянете мою ногу, правильно?
Нет, я не собираюсь брать дешевый удар по этому поводу, говоря: "зависание, метод реализован - он выбрасывает исключение NotImplementedException". Да, это правильно, вы должны реализовать метод, чтобы бросить NotImplementedException (в отличие от чистого вызова виртуальной функции на С++ - теперь это имеет смысл!). Хотя это довольно чертовски смешно, в моей голове есть более серьезная проблема.
Мне просто интересно, в присутствии исключения NotImplementedException, как кто-нибудь может что-либо сделать с .Net? Ожидаете ли вы, чтобы каждый абстрактный вызов метода был заблокирован блоком try catch для защиты от методов, которые могут быть не реализованы? Если вы поймаете такое исключение, что вы думаете об этом?
Я не вижу возможности проверить, действительно ли метод реализован без его вызова. Так как при вызове у него могут быть побочные эффекты, я не могу выполнить все мои проверки, а затем запустить свой алгоритм. Я должен запустить свой алгоритм, поймать NotImplementedExceptions и некоторые, как откат моего приложения в какое-то нормальное состояние.
Это безумие. Сумасшедший. Безумный. Итак, вопрос: Почему существует исключение NotImplementedException?
Как упреждающий удар, я не хочу, чтобы кто-то отвечал ", потому что дизайнеры должны помещать это в автоматически сгенерированный код". Это ужасно. Я предпочел бы, чтобы автоматически сгенерированный код не компилировался до тех пор, пока вы не предоставите реализацию. Например, автоматическая сгенерированная реализация может быть "throw NotImplementedException"; где исключение NotImplementedException не определено!
Кто-нибудь когда-либо поймал и обработал исключение NotImplementedException? Вы когда-нибудь оставляли в своем коде исключение NotImplementedException? Если да, то это означало бомбу замедленного действия (т.е. Вы случайно ее оставили там) или конструктивный недостаток (метод не должен быть реализован и никогда не будет вызван)?
Я тоже очень подозрительно отношусь к NotSupportedException... Не поддерживается? Что за? Если он не поддерживается, почему он является частью вашего интерфейса? Может ли кто-нибудь из Microsoft наложить неправильное наследство? Но я мог бы задать еще один вопрос, если я не буду слишком злоупотреблять этим.
Дополнительная информация:
Этот интересен для чтения по этому вопросу.
Похоже, существует сильное согласие с Brad Abrams, что "NotImplementedException для функциональности, которая еще только не реализована, но на самом деле должна (и будет). Что-то вроде того, что вы можете начать с того, когда вы строите класс, получите все методы там, бросая NotImplementedException, а затем очистите их реальным кодом..."
Комментарии Jared Parsons очень слабы и, вероятно, следует игнорировать: NotImplementedException: выбросить это исключение, когда тип не реализует метод для любого другая причина.
MSDN еще слабее в этом вопросе, просто заявив, что: "Исключение, которое вызывается, когда запрошенный метод или операция не реализовано".