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 da Data, ma non è possibile modificare nient'altro come the Message?
  • 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...

È stato utile?

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.

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