2013-06-12 17 views
7

Mi chiedevo se è possibile creare una classe obsoleta personalizzata. Ne ho bisogno e odio il fatto che Obsolete mostri questo avvertimento prima del mio input: QUALCOSA è Obsoleta :. Voglio solo dare un avvertimento/errore quando uso il campo/metodo con solo il mio ingresso, così per esempio:Attributo obsoleto personalizzato C#

[CustomObsolete("Hello")] 
public int i = 0; 

Will dare l'allarme/debug Ciao.

È possibile? Se uso # warning/# error, SEMPRE mostrerà l'errore/avvertimento.

+0

jon ha ragione, anche così ... se vuoi puoi controllare questo http://www.dotnetperls.com/obsolete o http://www.codeproject.com/Articles/107103/Uso -Obsolete-attributes-to-indicate-Obsolete-Metho – terrybozzio

+0

Mi stavo chiedendo perché voglio un attributo personalizzato dando un avvertimento con l'input che voglio. Ma penso che andrò con Obsolete. –

risposta

6

No, ObsoleteAttribute è efficacemente codificato nel compilatore C#: non c'è modo di creare il proprio attributo che il compilatore C# comprenderà come indicante che un membro è obsoleto.

Personalmente vorrei solo andare con ObsoleteAttribute - è davvero che male che il messaggio di errore inizia con "X è obsoleto"?

+0

Non mi piace molto, ma sembra che non ci sia altra opzione. –

0

è possibile utilizzare solo obsoleto

con l'errore

[Obsolete("Hello", true)] 
    public String foo() { 
     return "bar"; 
    } 

e con avvertimento

[Obsolete("Hello", false)] 
    public String foo() { 
     return "bar"; 
    } 
+0

Il modo in cui l'ho letto, l'OP è a conoscenza di ObsoleteAttribute ma non mi piace il modo in cui viene segnalato l'errore - nel tuo caso: "foo è obsoleto: 'Ciao'" –

2

Un modo per ottenere quello che vuoi sarebbe un costume post-build task. Dopo aver compilato il progetto, lascia che un altro programma che hai creato carichi questo assembly e lo analizzi per il tuo attributo. Potresti quindi emettere il messaggio che bacchetta e qualunque altra cosa. Ma l'output del numero di riga esatto e del file in cui viene utilizzato questo attributo sarà un compito difficile, perché per questo dovrai analizzare il file pdb (e funzionerà correttamente solo in modalità Debug).

Si consiglia di attenersi semplicemente all'attributo Obsolete di .NET. :-)