2010-11-03 10 views
25

En Java, usted define explícitamente qué excepciones se generan utilizando la palabra clave "throws". De esa manera, cualquiera que llame a su método sabe qué atrapar.C# que define explícitamente qué excepciones se lanzan

¿Hay algo en C#? De lo contrario, ¿cómo sé qué excepciones puedo capturar o cómo puedo informar a los demás sobre las excepciones que debo tomar?

Además, si estoy definiendo una interfaz, ¿hay alguna manera de decir "methodX() debería lanzar esta excepción en caso de error"?

+0

Imagino que la versión de .NET framework hará una diferencia aquí, pero en las versiones que uso la respuesta es: documenta bien las excepciones potenciales, y no - no hay forma de forzar el tipo de excepción lanzada (menos de atrapando todas las excepciones afuera, y volviendo a envolverlas en tu tipo preferido). No son solo las excepciones que podrías generar en el método, también hay burbujas de burbujas. – Rudu

Respuesta

32

No hay nada equivalente en C#: The Trouble with Checked Exceptions

Aparte de la documentación, no hay manera de declarar una interfaz decir "methodX() debe lanzar esta excepción en caso de error".

+1

Artículo interesante pero equivocado. – JeremyP

+0

muy interesante leer –

+1

@JeremyP ¿cómo está mal? – dbkk

3

C# no es compatible con esto. (No es que yo sepa de todos modos). Lo que puedes hacer es usar Xml Comments para que, al llamarte a tus métodos, estos datos sean mostrados por intellisense.

2

Por lo que sé que no hay declaración de tiradas en C#, puede documentar su método indicando que arroja una excepción pero no el manejo forzado de errores.

+0

¡jajaja me llevó escribir esto 2 otros ya han sido publicados! – DeliveryNinja

8

Esta función no está disponible en C#. Puede crear la documentación XML correcta (3 barras ///) e indicar las excepciones que se lanzan.

Esto será recogido por el mecanismo IntelliSense y será visible para los usuarios de la clase/método antes de usarlo.

2

C# no admite excepciones marcadas. Los diseñadores de idiomas consideran excepciones controladas en la forma en que Java las usa como una mala idea.

Some workarounds

10

C# /. Net no tiene excepciones controladas, que resultó ser menos útil en sistemas de gran escala que se pensaba. En muchos proyectos, el tiempo para mantener las especificaciones de excepción de verificación fue mucho mayor que el tiempo de depuración que se guardó al tenerlos.

Las excepciones comprobadas parecen un buen ideal hasta que tenga métodos que puedan tomar delegados o llamadas en el objeto que pase. Tomemos un caso simple, el método Sort() en una lista no puede saber qué excepciones arrojará ya que no sabe qué excepciones arrojará el método Compar() en los objetos que se están ordenando.

Por lo tanto, la especificación de las excepciones que puede arrojar un método debe poder incluir información sobre cómo se completan las excepciones de los objetos y delegados. ¡Nadie sabe cómo hacer esto!

Sin embargo, hay herramientas que puede verificar si está detectando todas las excepciones: consulte Exception Hunter de Red Gate. Personalmente, no veo mucho valor en esta herramienta, sin embargo, si le gustan las excepciones comprobadas, puede resultarle útil.

Cuestiones relacionadas