è un esempio valido solo per il tuo particolare caso.
Lo scopo del finally non è eseguire codice "dopo" il try catch ma di eseguire codice "sempre" qualsiasi cosa accada dopo il try e dopo i catch anche se per esempio ci sono dei return o dei throw cosa peraltro molto comune.
Il tipo di codice da eseguire in un finally non è quasi mai codice che contiene logica applicativa ma codice di pulizia (dispose ecc.)

considera questo


codice:
try
{
  p = new Pippo();
  p.Risultato =  5 / 0;

  return p;
}
catch
{
  throw;
}
finally
{
  pippo.dispose();
}
sia nel try che nel catch la funzione termina passando il controllo al chiamante in modi diversi (return e throw) ma in entrambi i casi il blocco finally viene sempre eseguito.
Ps.
Non si possono usare return o throw nel finally.