Perché le eccezioni .NET sono modificabili?
-
28-09-2019 - |
Domanda
Mi chiedo perché le classi di eccezioni .NET dalla libreria di classi base abbiano alcuni membri modificabili per impostazione predefinita
- Perché posso cambiare il
Source
,HelpLink
e valori daData
, ma non è possibile modificare nient'altro come theMessage
? - Perché lanciare l'eccezione riscrive il file
StackTrace
rendendolo anche mutevole?Aggiungere le informazioni di analisi dello stack alla traccia esistente sarebbe una progettazione migliore (ma comunque modificabile)? - Quali possibili miglioramenti potrebbero esserci nella progettazione delle eccezioni .NET?
Mi interessano solo le scelte progettuali...
Soluzione
IL StackTrace
ha senso, almeno per me.L'idea è che un Exception
(come oggetto) può essere passato, restituito da metodi, ecc.IL StackTrace
è importante solo perché un'eccezione viene lanciata e catturata.In un senso, StackTrace
è davvero più una proprietà di lancio dell'eccezione, non del Exception
oggetto stesso.
Per quanto riguarda la mutabilità delle altre proprietà, presumo che sia solo perché è più semplice costruire un'istanza assegnandola alle proprietà piuttosto che forzandole tutte nel costruttore.Ricordatelo in quel momento Exception
è stato progettato, C# non aveva parametri facoltativi.
Potresti prendere in considerazione una riprogettazione dove Exception
e le classi derivate sono immutabili, ma ciò richiederebbe una fabbrica di eccezioni o una classe di creazione.Sarebbe semplicemente derivare da Exception
molto più complesso.