Domanda

In riferimento a Qual è il modo corretto di fare un'eccezione personalizzata di .NET serializzabile?
e sono tutti Eccezioni NET serializzabile? ...

Perché i miei eccezioni essere serializzabile?
Qualcuno ha detto "può essere considerato un errore" se un'eccezione personalizzato definito da una libreria di terze parti, non è serializzabile. Perché?

Perché sono eccezioni diverso rispetto alle altre classi a questo proposito?

È stato utile?

Soluzione

Perché i vostri eccezioni potrebbero dover essere schierato tra le diverse AppDomain e se non lo sono (correttamente) serializzabile si perde preziose informazioni di debug. A differenza di altre classi, non si avrà il controllo su se verrà schierò tuo eccezione -. Lo farà


Quando dico "Non si avrà il controllo" Voglio dire che le classi create in genere hanno uno spazio finito della esistenza e l'esistenza è ben nota. Se si tratta di un valore di ritorno e qualcuno tenta di chiamare in un altro AppDomain (o su una macchina diversa) che riceveranno un guasto e può solo dire "Non usare in questo modo." Il chiamante sa che hanno per convertirlo in un tipo che può essere serializzato (avvolgendo la chiamata al metodo). Tuttavia, poiché le eccezioni sono gorgogliare fino alla cima, se non catturati possono trascendere i confini AppDomain che non sapevo nemmeno di avere. Il tuo eccezione applicazione personalizzata 20 livelli di profondità in un dominio di applicazione diverso potrebbe essere l'eccezione segnalato al Main () e nulla lungo la strada sta per convertirlo in un'eccezione serializzabile per voi.

Altri suggerimenti

In aggiunta alla risposta di Talljoe, le vostre eccezioni possono essere passati attraverso i servizi Web e, in questo caso, l'eccezione deve essere serializzabile / deserializable in modo che possa essere trasformato in XML e trasmesso dal servizio Web

Penso che il default per tutte le classi dovrebbe essere Serializable a meno che non contengano una classe che non è esplicitamente serializzabile. E 'fastidioso per non essere in grado di trasferire una classe solo perché qualche progettista non pensarci.

La stessa cosa con "Final", tutte le variabili devono essere "finale" per impostazione predefinita a meno che non specificatamente dire che sono "Mutevole".

Inoltre, io non sono sicuro che ha senso avere una variabile che non è privata.

Oh bene, hanno bisogno di progettare la mia propria lingua.

Ma la risposta è, non si sa come verrà utilizzato il tuo eccezione e si presume essere in grado di essere gettato attraverso chiamate remote.

Un altro luogo dove gli oggetti tenuti ad essere serializzabile è Asp.Net sessione. Memorizziamo ultima eccezione nella sessione e non eccezioni serializzabili esigenze di traduzione in più per archiviare i propri dati come serializzabile (specificando eccezione originale come interno non aiuta)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top