По привычке я склонен класть классы/структуры/перечисления в отдельные файлы, когда они не вложены.
Для делегатов кажется излишним создание отдельного файла для одного лайнера:
public delegate string MyDelegateThatIsNotNestedInAnyClass ( string par );
Я обычно добавляю его в конец самого близкого родственного файла класса. Мне просто интересно, что делают другие люди?