1 Requerimentos de sistema

O bug relacionado neste post foi detectado utilizando-se os softwares abaixo:
• Windows Vista Enterprise Edition SP1.
• Visual Studio Team System 2008 (2008 9.0.21022.8 RTM).
• .NET Framework 3.5.
• Compilador C# 3.5.21022.8

2 Demonstração

Veja abaixo um exemplo de utilização do atributo Obsolete:

public class User
{
    private System.Collections.Generic.Dictionary<int, string> users;

    [System.Obsolete(”Esta propriedade está obsoleta.”, true)]
    public System.Collections.Generic.Dictionary<int, string> Users
    {
        get
        {
            return this.users;
        }
    }

    public User()
    {
        this.users=new System.Collections.Generic.Dictionary<int,string>();
        this.users.Add(0, “Evandro de Paula”);
    }
}

Note que a propriedade Users foi marcada como obsoleta, onde os parâmetros abaixo foram definidos como:
message = “Esta propriedade está obsoleta” (mensagem de erro ou alerta que é exibida durante a compilaçào quando a propriedade for utilizada).
error = true (indica que a utilização da propriedade obsoleta deve implicar em um erro de compilação).

Conforme o esperado, quando compilamos o código abaixo, obtemos um erro na linha em destaque:

class Program
{
    static void Main(string[] args)
    {
        User user = new User();
        System.Collections.Generic.Dictionary users=user.Users;
        System.Console.ReadLine();
    }
}

Entretanto, se implemetarmos a alteração em destaque abaixo, onde não utilizamos diretamente a propriedade obsoleta, mas sim um elemento da coleção, notaremos que nenhum erro é informado durante o processo de compilação:

class Program
{
    static void Main(string[] args)
    {
        User user = new User();
        System.Console.WriteLine("Name: " + user.Users[0]);
        System.Console.ReadLine();
    }
}

3 Conclusão

Mantenha atenção redrobrada no emprego do atributo Obsolete na tentativa de minimizar a possibilidade de comportamentos inesperados pelo sistema.
A boa notícia é que a correção deste bug já foi providenciada pelo time da Microsoft e deve estar disponível na próxima versão da plataforma .NET.

4 Código-fonte

Você pode baixar o código-fonte desta ferramenta no endereço http://www.orchestratechnology.com.br/blog/csharp/ObsoleteCheck.zip.