come ha detto MItaly va usato sugli oggetti che implementano IDisposable. questi oggetti hanno il metodo dispose che va usato subito, non appena hai finito di usare l'oggetto per liberare le risorse non gestite.
Nel tuo codice quindi, oltre ai try-finally, non hai messo le chiamate ai Dispose() cosa che ti costa un leak di risorse non indifferente.
La direttiva using va usata come ha riportato MItaly ed equivale a scrivere in modo piu conciso questo tipo di codice:

codice:
try
{
  StreamReader reader = new StreamReader(File.Open(@"config.txt", FileMode.Open));
  //lavori...
  //return...
}
finally
{
  reader.dispose();
}
MItaly l'ha scritto in modo da non creare una variabile fs ma puoi anche mettere due o piu using uno dentro l'altro, cosa che capita spesso:

codice:
  using (FileStream fs = File.Open(@"config.txt", FileMode.Open))
  {
     using (StreamReader reader = new StreamReader(fs))
     {
            return reader.ReadToEnd();
     }
  }