質問: うろ覚えですが、確かJavaだと`jp.co.aaa.bbb.Hoge`というクラスがあったら、`jp\co\aaa\bbb\Hoge.java`というフォルダ階層にしなければいけなかったと記憶しています。 この仕様はパッケージを見ただけでどこにソースがあるのかわかりやすいというメリットがあると思います。 C#の場合、名前空間とフォルダ構成の関連に制限は無かったと思います。 この仕様のメリットは何でしょうか? 自分は * Config, Resource, Sourceなどでフォルダ分けして整理しても名前空間の方に`Source`と付けなくて済む * あるプロジェクトからソースファイルをいくつか持ってきて自分のテスト用プロジェクト(動作確認用)を動かす場合、`tmp`などのフォルダを作って全部そこに放り込んでおけば済む(自分で作ったソースと分けておき、かつ名前空間のフォルダ階層をいちいち作らずに済む) というのを思いつきました。
回答: こんにちは。 1つのファイルに複数の名前空間を定義できることはメリットと思います。 プライベートな名前空間をC#で定義できるかどうか把握していませんが、もし定義できるなら、外部I/Fを担うパブリックな名前空間と同じファイルに、実装をプライベートとして入れたいことはあると思います。 プライベート名前空間が無かった場合でも、internalのような名前にして「internalの中のものは使うな」というプログラミング規約にした時、同様です。(C++ではこのようにしてます。)