2010-10-25 11 views

risposta

23

Risposta breve:

Sarà necessario creare un nuovo nethod con la nuova firma, e segnare la corrente come obsoleto.

Più rispondere

Cosa si vuole evitare a tutti i costi è una pausa codice! Quindi, in particolare in un framework aziendale, vuoi pubblicizzare che il tuo metodo non sarà più supportato, ad esempio, ma non vuoi essere responsabile per le soluzioni dipendenti da crash a causa di un'architettura o di una decisione di progettazione o dalla tua parte, giusto?

La classe ObsoleteAttribute farà il trucco per voi.

Una volta che un membro della classe ha contrassegnato come obsoleto, verrà generato un avviso sul lato client, quelli che utilizzano il framework, per continuare in questo modo, o anche uno dei tuoi colleghi sotto lo stesso progetto.

public class MyClass { 
    [Obsolete("This method should no longer be used, please use MyNewMethod() instead.")] 
    public void MyMethod(string name, long phoneNumber, long faxNumber) { 
    } 

    public void MyNewMethod(string name, long phoneNumber, long faxNumber, string email) { 
    } 
} 

Questo farà pubblicità che MyMethod non è più supportato durante gli utenti di codice.

Dopo un certo periodo di tempo, abbastanza ragionevole da consentire a tutti di modificare il proprio codice, è possibile indicare a questo attributo di inviare un messaggio di errore quando il codice utilizza ancora il metodo obsoleto.

public class MyClass { 
    [Obsolete("This method should no longer be used, please use MyNewMethod() instead.", true)] 
    public void MyMethod(string name, long phoneNumber, long faxNumber) { 
    } 

    public void MyNewMethod(string name, long phoneNumber, long faxNumber, string email) { 
    } 
} 

Impostando il secondo parametro del costruttore ObsoleteAttribute classe per true, si tel al compilatore di pubblicizzare l'uso di questo metodo come un errore.

Dopo un po 'di tempo, è possibile rimuovere completamente il metodo dal codice per pulirlo un po'. Questo fa parte dei metodi di refactoring incoraggiati dalla metodologia Agile Software Development.

Questo aiuto?

+0

+1 per una risposta più competitiva e la spiegazione dei passaggi. Più informativo di quello che risponde Steves – Gorgen

6

Sì. È possibile solo mark types and members of types as obsolete, non i singoli parametri. Si potrebbe, tuttavia, sovraccaricare il metodo, mantenendo lo stesso nome e segnare il vecchio come obsoleto:

class Act 
{ 
    [Obsolete("DoSomething(int, int) is obsolete", false /*warn only*/)] 
    public void DoSomething(int i, int j) 
    { 
    } 

    public void DoSomething(int i) 
    { 
    } 
} 
2

penso che sarebbe meglio creare un nuovo metodo.

Cosa intendi rendendo obsoleto il parametro? Questo dipende da un valore specifico per quell'argomento? Quando chiami un metodo, devi sempre specificare l'argomento comunque.

7

Sì, penso che l'unico modo sia quello di creare un nuovo metodo senza il parametro e contrassegnare quello originale con ObsoleteAttribute.

+0

+1 Assolutamente! =) –

7

con l'attributo Obsolete:

[Obsolete("Please use void AnotherMethod() instead", false)] 
void SomeMethod(Int32 data){ 
} 

Il booleana l'attributo dice al compilatore di generare un avviso, se si cambia a true il compilatore genererà un errore. Vedere here per la documentazione su di esso.

+0

+1 Questo è il modo migliore per andare! =) –

+0

È possibile farlo senza contrassegnare l'intero metodo come obsoleto? – Brian

+1

No, come lo stato di altre risposte (come ad esempio Chris Wallis), Parametro non è un obiettivo per ObsoleteAttribute. –