Domanda

C'è un modo (utilizzando Reflection spero) che posso fare un oggetto istanziato immutabile insieme a tutte le sue proprietà pubbliche ? Ho una classe da qualcun altro codebase (nessuna fonte disponibili) che ho bisogno di utilizzare e io in fondo voglio un'eccezione per essere gettato se qualsiasi pezzo di codice tenta ovunque di chiamare un setter pubblico all'interno di questa classe dopo che è stato istanziato.

Nota: Non voglio creare un oggetto wrapper per la classe al fine di attuare questo. Io sono pigro.

È stato utile?

Soluzione

No, non c'è via di riflessione. definizioni di tipo non possono essere modificati a runtime attraverso la riflessione e quindi non può essere utilizzato come un dispositivo per fare un tipo immutabile.

Ma la riflessione può essere usato per violare l'immutabilità di un tipo. Ad esempio, è possibile impostare le proprietà contrassegnate con sola lettura tramite la riflessione tempo dopo il costruttore è stato eseguito.

Altri suggerimenti

Lo trovo difficile credere che si è disposti a introdurre il codice di riflessione per fare qualcosa che può essere risolto semplicemente con una classe wrapper.

Un piccolo investimento di tempo vi farà risparmiare un sacco di tempo doloroso dopo, quando le pause di riflessione o di codice richiede modifiche. Una classe wrapper è semplice, facile da implementare, è di tipo-safe, e avrà un senso ad altri sviluppatori lungo la strada. Non lasciate che la pigrizia dettare le scelte architettoniche.

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