De manière générale je suis plutôt de l'avis de Zeph que de l'avis opposé en ce qui concerne le fait de mettre plusieurs classes en un fichier.
Mais pouvoir mettre plusieurs classes (ou assimilés) dans un même fichier c'est quand même pratique dans certains cas :
- Des fois on peut décider de faire un groupement logique et régulier des classes par fichier. Il faut que ce soit un modèle spécifique/logique, défini à l'avance, et constant dans la partie du projet où il est utilisé (pas dans un seul et unique fichier, quoi

). Par exemple je définis un "modèle" où j'ai plusieurs tuples de classes (par exemple des paires delegate + EventArgs associé), et je décide de faire un fichier par tuple plutôt qu'un fichier par classe.
- Aussi, en C# on peut faire de manière valide une classe A et une classe A<T>. Logiquement, les fonctionnalités de A<T> devraient être assez proche de celles de A, et A<T> dérivera probablement directement de A (ou l'inverse), donc tu les mets dans le même fichier…

(De même pour A<T, U>, A<T, U, V>, …)
- Et puis, typiquement, quand on génère du code (par exemple des DataTable de merde) avec un template (.tt), heureusement qu'on peut fourrer tout le code au même endroit dans le même fichier !
