Por que sempre fechar a conexão com o banco de dados?

Se a conexão com um banco de dados consome muitos recursos, por que uma conexão com o banco de dados sempre deve ser fechada no seu aplicativo se você precisar abri-lo novamente? Posso disponibilizar globalmente essa conexão em todo o meu aplicativo para que outras classes e métodos possam reutilizá-lo?

Por exemplo (no pseudo código):

public class PopulateGridViews()
{
    public SqlConnection conn = new SqlConnection(@"Database:DATABASE");
    conn.Open();

    void PopulateGrid1()
    {
        SqlCommand cmd = new SqlCommand("SELECT * FROM TABLE1");
        cmd.Connection = conn;
        cmd.ExecuteNonQuery();
        cmd.Dispose();
        // Populate Grid1
    }

    void PopulateGrid2()
    {
        SqlCommand cmd = new SqlCommand("SELECT * FROM TABLE2");
        cmd.Connection = conn;
        cmd.ExecuteNonQuery();
        cmd.Dispose();
        // Populate Grid2
    }
}

questionAnswers(3)

yourAnswerToTheQuestion