2010-11-03 13 views
25

In Java, si definiscono esplicitamente le eccezioni generate mediante la parola chiave "genera". In questo modo, chiunque chiami il tuo metodo sa cosa catturare.C# che definisce in modo esplicito quali eccezioni vengono generate

C'è qualcosa in C#? In caso contrario, come faccio a sapere quali eccezioni prendere, o come faccio a far sapere agli altri quali eccezioni prendere?

Inoltre, se sto definendo un'interfaccia, c'è un modo per dire "methodX() dovrebbe lanciare questa eccezione in caso di errore"?

+0

Immagino che la versione del framework .NET può fare la differenza qui, ma nelle versioni che uso la risposta è: a documentare bene potenziali eccezioni, e non - non c'è modo di forzare il tipo di eccezione generata (a corto di intrappolando tutte le eccezioni all'esterno e reinserendole nel tipo preferito). Non sono solo le eccezioni che potresti generare in-method, ma anche le bolle che stai lasciando. – Rudu

risposta

32

Non c'è nulla di equivalente in C#: The Trouble with Checked Exceptions

Altro che la documentazione, non c'è modo di dichiarare un'interfaccia per dire "methodX() dovrebbe lanciare questa eccezione in caso di errore".

+1

Articolo interessante ma sbagliato. – JeremyP

+0

molto interessante leggere –

+1

@JeremyP come è sbagliato? – dbkk

3

C# non supporta questo. (Non che io sappia comunque). Quello che puoi fare è usare Xml Comments in modo tale che mentre ti chiami metodi questi dati verranno mostrati da intellisense.

2

Per quanto ne so non esiste una dichiarazione di tiri in C# è possibile documentare il metodo indicando che genera un'eccezione ma nessuna gestione di errori forzati.

+0

lol tempo mi ci è voluto per scrivere questo 2 altri sono già stati pubblicati! – DeliveryNinja

8

Questa funzione non è disponibile in C#. È possibile creare una corretta documentazione XML (3 slash ///) e indicare quali eccezioni vengono lanciate.

Questo verrà raccolto dal meccanismo IntelliSense e sarà visibile agli utenti della classe/metodo prima di utilizzarlo.

2

C# non supporta le eccezioni controllate. I progettisti del linguaggio considerano le eccezioni controllate nel modo in cui java le usa come una cattiva idea.

Some workarounds

10

C# /. Net non ha eccezioni controllate, hanno dimostrato di essere meno utile nei sistemi su larga scala di primo pensiero. In molti progetti il ​​tempo per mantenere le specifiche delle eccezioni di controllo era molto più grande del tempo di debug salvato da averli.

Le eccezioni controllate sembrano un buon ideale finché non si hanno metodi che possono assumere delegati o chiamate nell'oggetto che si inoltra. In un caso semplice, il metodo Sort() in un elenco non può sapere quali eccezioni genererà, dato che non sa quali eccezioni verrà lanciato il metodo Compar() sugli oggetti ordinati.

Quindi la specifica per le eccezioni che un metodo può lanciare deve essere in grado di includere informazioni sul modo in cui le eccezioni vengono popolate dal passaggio in oggetti e delegati. Nessuno sa come farlo!

Tuttavia ci sono strumenti da controllare se si stanno rilevando tutte le eccezioni - vedere Exception Hunter di Red Gate. Personalmente non vedo molto valore in questi strumenti, tuttavia se ti piacciono le eccezioni controllate potresti trovarle utili.

Problemi correlati