投稿数 - 437, コメント - 59536, トラックバック - 156

鉄のニシキヘビ - 2 匹目

アセンブリを参照するときは以下のように書く。

>>> 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

投稿日時 : 2006年5月17日 22:27

フィードバック

# re: 鉄のニシキヘビ - 2 匹目

こんちわ!
Systemのスペルが「Sytem」になっとります!
1.0が出たので試してみようとコピペしてたのですが動かず子一時間悩んだ挙句、判明いたしましたw
2006/09/07 11:34 | koka

# re: 鉄のニシキヘビ - 2 匹目

箇所を書き忘れました。
「clr.AddReference("Sytem.Windows.Forms")」とかです。
2006/09/07 11:35 | koka

# re: 鉄のニシキヘビ - 2 匹目

おっと、すみません。そしてありがとうございます。1.0 が出たので試す人多そうですね。

#しかし、コピペとは何たることだ!w
2006/09/07 12:53 | 囚人

# FnLQUbTEknSIRwVlod

I must admit, the webmaster is a cool guy..!
2011/12/27 18:37 | http://www.hooksandlattice.com

# klMSusfqGnyvg

Hello! How do you feel about young composers?!...

コメントの投稿

タイトル
名前
URL
コメント