2010-01-29 16 views
7

Ho alcune classi, che hanno diversi metodi che non voglio davvero essere lì, ma ci sono semplicemente perché il serializzatore XML ne ha bisogno. Esiste comunque la possibilità di generare errori/avvisi in fase di compilazione se vengono richiamati da un codice utente?C'è un modo per fermare un metodo chiamato in fase di compilazione?

Sono consapevole che posso implementare IXmlSerializable e sono anche consapevole di poter separare le classi in classi di archiviazione puramente dati, tuttavia, non sto facendo una domanda su come dovrei progettare un sistema del genere, sono semplicemente chiedendo se c'è un modo per generare errori in fase di compilazione/avvisi se si chiamano da tutto ciò che non è il serializzatore XML ...

+0

vedere anche http://stackoverflow.com/questions/968249/c-create-custom-warning-in-visual-studio-if-certain-method-is-used-in-source-co –

risposta

14

è possibile aggiungere

[Obsolete] 

al metodo. La proprietà IsError di ObsoleteAttribute controlla se viene generato un errore o un avviso ed è possibile fornire anche un messaggio esplicativo.

+0

Eccellente, grazie –

+0

[Obsoleto], ha uno scopo diverso da quello che intende OP. Non credo che questo sia il modo in cui questo attributo deve essere usato. –

+0

@Pop: certo, lo scopo è forse leggermente diverso, ma il risultato è probabilmente esattamente quello che è stato chiesto. –

5

È possibile decorare i membri in questione con lo ObsoleteAttribute. La sua intenzione è leggermente diversa, ma genererà avvisi (o errori) del compilatore quando chiamati dal codice utente.

0

È possibile nascondere i metodi dagli utenti intellisense utilizzando l'attributo [EditorBrowsable] e dalla finestra di progettazione proprietà utilizzando [Browsable], attributo.

Non è consigliabile utilizzare [ObsoleteAttribute], perché trasmette un significato diverso a quale stato del metodo è effettivamente. Utilizzare invece un commento che indica che il metodo non deve essere utilizzato dal codice utente.

Anche tenere a mente che ci sono una sacco di utenti che compilano il loro codice con avvertimenti minaccia come errori, che renderà impossibile per loro di compilare codice valido, in questo caso.


+0

ObsoleteAttribute trasmette un significato leggermente diverso, ma ha il comportamento desiderato. Direi che EditorBrowsable in realtà non ha il significato di "non si dovrebbe chiamare questo dal codice utente" - e non genera avvisi o errori, che è il comportamento desiderato in questo caso. –

+1

La risposta di Jon è praticamente azzeccata per me, perché sto rifattorizzando un vecchio codice, e non ho il tempo di riprogettarlo completamente in questo momento, quindi se riesco a scovare schemi di utilizzo degli oggetti scadenti con errori di compilazione , questa è una grande vittoria per me, certamente non l'ideale zen del computer, ma una grande vittoria, nondimeno. –

+0

@ Whit Whitfield +1 per il pragmatismo –

Problemi correlati