インデント深い(名前空間の話)
プログラミングC#中のサンプルプログラムは、ひたすらnamespace宣言が付いている。
これが恐らく一般的なのだろうが、namespaceだけで1インデント行かれると、さらにclass、Mainでそれぞれ1インデントずつ下がるため、プログラムの中身は4段目から始まることになる。
はっきり言ってうざい。
で、namespace取ったらどうなるの?ってやってみた。
using System; class test { static void Main() { Console.WriteLine("aaa"); } }
結果はこう。
>csc test.cs Microsoft (R) Visual C# 2008 Compiler version 3.5.21022.8 for Microsoft (R) .NET Framework version 3.5 Copyright (C) Microsoft Corporation. All rights reserved. >test aaa >
なんの問題もなく動いた。サンプル書いてる限りでは、namespaceいらなそう。
じゃあなんでこんな構文にしたのだろうと考えてみる。
Javaではpackage文でnamespaceを宣言する。これは一つのファイルに一つしか書けない。(一つのファイルは二つのディレクトリに置けないので。ただし、そうとも限らない*1らしい。)
ってことは、C#では一つのファイルに二つ以上の名前空間を含められるのか?と思い、こんなサンプルを書いてみた。
using System; namespace ns1 { class nstest { static void Main() { ns2.Hello.hello(); } } } namespace ns2 { class Hello { public static void hello() { Console.WriteLine("ns2.Hello.hello"); } } }
この結果はこう。
ns2.Hello.hello
というわけで、C#では一つのファイルに二つ以上の名前空間を含められるので、そのためにこういう構文になっているのだと思います。たぶん。