アセンブリを参照するときは以下のように書く。
>>> import clr
>>> clr.AddReference("Sytem.Windows.Forms")
これで、System.Windows.Forms.dll を参照できる。拡張子は必要ない。では、メッセージボックスを表示してみる。
>>> System.Windows.Forms.MessageBox.Show("Hello IronPython !")
Traceback (most recent call last):
File , line 0, in input##8
NameError: name 'System' not defined
これでは駄目だ。前回の記事でも書いたように、まず名前空間を使う事を宣言しなければならない。
>>> import System.Windows.Forms
>>> System.Windows.Forms.MessageBox.Show("Hello IronPython !")
これで無事メッセージボックスを表示できた。
前回も少し触れたが、「名前空間」の import 文は少し奇妙だ。一度 IronPythonConsole を閉じて最初からやり直してみよう。
>>> import clr
>>> clr.AddReference("System.Windows.Forms")
>>> import System
>>> System.Windows.Forms.MessageBox.Show("Hello IronPython !")
先の例では、名前空間を import しないとメッセージボックスを表示できなかったが、今度の例では「import System」を行うだけで表示する事ができる。「System名前空間」と「System.Windows.Forms名前空間」は名前が少し似ているだけで、全く別の名前空間のはずだ。これは一体どういう事か。
実はこれは Python 的には全く問題はない書き方であり、System という名前のモジュール全体をインポートするという意味だ。全体とは、ネストされた、それ以下の要素全ての事。
自然と湧く疑問が、次のように書けばどうなるのかだ。
>>> import System
>>> import clr
>>> clr.AddReference("System.Windows.Forms")
>>> System.Windows.Forms.MessageBox.Show("Hello IronPython !")
アセンブリの参照よりも前に名前空間の import を行う。実行してみると、これでも問題なくメッセージボックスは表示される。果たしてこれは正しい動きなのだろうか!?
#脱字修正 2006/09/07