Como marcar um método como obsoleto ou obsoleto?

1003

Como marcar um método como obsoleto ou obsoleto usando C # ?

Chris Ballance
fonte
Aqui está um vídeo do YouTube que explica todos os 3 variações do atributo obsoleto: youtube.com/watch?v=_AQ5wsPnfJ4
Shivprasad Koirala
3
Não se esqueça que também existe [EditorBrowsable(EditorBrowsableState.Never)]( stackoverflow.com/a/9086345/661933 ). Serve a um propósito ligeiramente diferente.
Nawfal

Respostas:

1595

O caminho mais curto é, adicionando o ObsoleteAttributecomo um atributo para o método . Certifique-se de incluir uma explicação apropriada:

[Obsolete("Method1 is deprecated, please use Method2 instead.")]
public void Method1()
{  }

Você também pode causar falha na compilação, tratando o uso do método como um erro em vez de aviso , se o método for chamado de algum lugar no código como este:

[Obsolete("Method1 is deprecated, please use Method2 instead.", true)]
puxão
fonte
98
se você quiser que o compilador lançar um erro se alguém usa o uso do método do método sobrecarregado Obsoleto (String mensagem, erro Bool)
HitLikeAHammer
141
Obsoleto sem uma descrição deve ser obsoleto ... notherdev.blogspot.com/2013/02/obsolete-should-be-obsolete.html
dotjoe
31
Nos seus exemplos, a parte "O método1 está obsoleto" é bastante redundante. Marcando-o como obsoleto, você está dizendo que é realmente obsoleto; portanto, não há necessidade de reformular isso na mensagem. Especialmente porque o aviso / erro resultante será 'Método1' obsoleto: 'Método1 está obsoleto, use o Método2'.
Irreal
8
Isso é bom. Acabei de colocar um texto de exemplo para mostrar que você pode adicionar uma mensagem mais específica, se desejar.
precisa
14
@ akshay2000 Renomear ou remover o método deixaria o consumidor sem noção do motivo pelo qual ele foi renomeado ou removido e o que deveria ser usado.
Lensflare 07/07
136

Para marcar como obsoleto com um aviso:

[Obsolete]
private static void SomeMethod()

Você recebe um aviso ao usá-lo:

Aviso obsoleto é mostrado

E com o IntelliSense:

Aviso obsoleto com o IntelliSense

Se você deseja uma mensagem:

[Obsolete("My message")]
private static void SomeMethod()

Aqui está a dica da ferramenta IntelliSense:

IntelliSense mostra a mensagem obsoleta

Finalmente, se você deseja que o uso seja sinalizado como um erro:

[Obsolete("My message", true)]
private static void SomeMethod()

Quando usado, é o que você obtém:

O uso do método é exibido como um erro

Nota: Use a mensagem para informar às pessoas o que elas devem usar, e não por que é obsoleto.

mark_h
fonte
66

Adicionar uma anotação com o método usando a palavra-chave Obsolete. O argumento da mensagem é opcional, mas é uma boa ideia comunicar por que o item agora está obsoleto e / ou o que usar.
Exemplo:

[System.Obsolete("use myMethodB instead")]
void myMethodA()
FTWinston
fonte
36

Com ObsoleteAttributevocê pode mostrar o método obsoleto. O atributo obsoleto possui três construtores:

  1. [Obsolete]: é um construtor sem parâmetros e é um padrão usando este atributo.
  2. [Obsolete(string message)]:Nesse formato, você pode entender messagepor que esse método foi descontinuado.
  3. [Obsolete(string message, bool error)]:nesse formato, a mensagem é muito explícita, mas errorsignifica que, no tempo de compilação, o compilador deve estar mostrando erro e causar falha na compilação ou não.

insira a descrição da imagem aqui

Sina Lotfi
fonte