Ein Namespace ist eine übergeordnete Organisationseinheit in .NET.
Typen deklarieren innerhalb Klassen ist in der Regel verpönt (aber wie bei allen Dingen ist es keine 100%ige Regel), weil es die Typen enger koppeln und schwieriger zu finden machen kann.
VB.NET-Module sind eher eine Ausnahme ( bearbeiten (sie sind eigentlich eher ein Compiler-Trick/syntaktischer Zucker), aber normalerweise ist alles im .NET-Ökosystem in einem Namespace enthalten.
Ihr Beispiel bietet sich zur Wiederverwendung an; wäre es innerhalb einer Klasse, dann würde es bedeuten, dass der Delegat nur von dieser Klasse verwendet werden sollte und würde wahrscheinlich dazu führen, dass unnötigerweise doppelte Delegaten eingeführt werden.
Update: Wenn man nur mit einer Handvoll Typen arbeitet, scheinen Namespaces nicht sehr nützlich zu sein, aber ohne sie wäre ein Projekt jeder Größe eine organisatorische Katastrophe. Stellen Sie sich das .NET-Framework ohne Namespaces vor. Nach einer (wahrscheinlich längst veralteten) Zählung gibt es 3500 Typen im Framework.
Namensräume sind wie Ordner oder Schubladen für Dokumente; ein paar lose Papiere sind leicht zu verwalten, aber wenn Sie viele Seiten haben, wird es mühsam, die gewünschte Seite zu finden.
Lesen Sie die Dokumentation, sie ist kurz und nicht furchtbar kompliziert (Namespaces sind es auch nicht), hat aber ein paar gute Punkte MSDN - Namespace (c#)