De onde veio a variável = null como "destruição de objeto"?

Trabalhando em vários sistemas legados escritos em várias versões do .NET, em muitas empresas diferentes, continuo encontrando exemplos do seguinte padrão:

public void FooBar()
{
    object foo = null;
    object bar = null;

    try
    {
       foo = new object();
       bar = new object();

       // Code which throws exception.
    }
    finally
    {
       // Destroying objects
       foo = null;
       bar = null;
    }

}

Para quem sabe como o gerenciamento de memória funciona no .NET, esse tipo de código é extremamente desnecessário; o coletor de lixo não precisa que você atribua manualmentenull para dizer que o objeto antigo pode ser coletado, nem atribuirnull instrui o GC a coletar imediatamente o objeto.

Esse padrão é apenas ruído, dificultando a compreensão do que o código está tentando alcançar.

Por que, então, continuo encontrando esse padrão? Existe uma escola que ensina essa prática? Existe um idioma no qual atribuirnull são necessários valores para variáveis com escopo local para gerenciar corretamente a memória? Existe algum valor adicional na atribuição explícitanull que eu não percebi?

questionAnswers(0)

yourAnswerToTheQuestion