2013-07-03 2 views
14

Что такое эквивалент C# для Java Throwable?Что такое эквивалент C# для Java Throwable?

В Java корень иерархии классов исключений называется Throwable, неException. Базовый класс Throwable имеет два производных класса:

Exception: условия, которые разумное приложение может захотеть поймать.

Error: для серьезных проблем, которые разумная программа не должна пытаться поймать.

Так что базовый класс Throwable содержит проблемы, которые разумная программа не должна пытаться поймать.

+1

@tieTYT Угадай, что люди думают о чем-то легком в поиске? – Daniel

+1

@ Даниэль я вижу. Я не знал, что это преступление, способное сбивать вниз. –

+5

Я не думаю, что этот вопрос не так плох, как предлагает голосование. У Java есть отдельный класс Throwable из класса 'Exception', который не является чем-то, что напрямую сопоставляется с C#.«Смотря вверх» то, что не существует, не всегда просто, особенно если вы ожидаете, что это будет где-то ... –

ответ

12

Это было бы Exception class. В отличие от исключений в .NET нет отдельной «бросающейся» концепции.

+0

(Не могу голосовать, поскольку я не знаю, что такое« броски »- это позор). Не можете ли вы выбросить все, что захотите, в C++/CLI? Я думал, что ограничение «Исключение» предназначено только для кода Common Language Specification - совместимого кода, но не .Net в целом ... –

+0

@AlexeiLevenkov Я не верю, что C++/CLI позволяет это либо: CLR позволит вам бросить любую объект, но CLS требует, чтобы объект выводился из «Исключения». Я не считаю, что какие-либо существующие языки (которые я видел) позволяют вам исключать исключение, отличное от нуля. –

+0

Поиск, если возможно - MSDN говорит, что это, например, в [String (C++ Component Extensions)] (http://msdn.microsoft.com/en-us/library/vstudio/ms177218.aspx). Я не уверен, как это работает внутри ... возможно, оно действительно преобразует его в/из исключения. –

0

.Net допускает исключения любого класса, но C# ограничивает бросок и улов до исключения. Используйте предложение catch, которое не определяет ни тип, ни переменную для исключения исключений исключений.

Соответствующая спецификация сниппает:

Когда раздел задвижки определяет класс-тип, тип должен быть System.Exception, типом, который является производным от System.Exception или типа параметра типа, который имеет систему. Исключение (или его подкласс) в качестве его эффективного базового класса.

Когда предложение catch указывает как тип класса, так и идентификатор, объявляется переменная исключения данного имени и типа. Переменная исключения соответствует локальной переменной с областью действия, которая распространяется на блок catch. Во время выполнения блока catch исключающая переменная представляет собой исключение, которое в настоящее время обрабатывается. Для проверки определенного назначения переменная исключения считается определенно назначенной во всей своей области.

Если предложение catch не содержит имя переменной исключения, невозможно получить доступ к объекту исключения в блоке catch.

Предложение catch, которое не указывает ни тип исключения, ни имя переменной исключения, называется общим предложением catch. В заявлении try может быть только одно общее предложение catch, и если он присутствует, это должно быть последнее предложение catch.

Некоторые языки программирования могут поддерживать исключения, которые не могут быть представлены как объекты, происходящие из System.Exception, хотя такие исключения никогда не могут быть сгенерированы кодом C#. Для исключения таких исключений может быть использовано общее правило catch. Таким образом, общее предложение catch семантически отличается от того, которое указывает тип System.Exception, поскольку первое может также перехватывать исключения из других языков.

.Net 4.0 представляет концепцию, похожую на класс ошибок Java. В то время как Исправленные Исключения Исключения расширяют Исключение, используются только методы с HandleProcessCorruptedStateExceptionsAttribute.