2007年01月16日
AS3で1ファイルに複数のクラスを定義する方法
ActionScript 3.0 で1つの as ファイルにつき、複数クラスを定義する方法について調べてみました。
パッケージ宣言内にはクラス・関数・変数・名前空間のうち、1つしか含められません。そして、その名前はファイル名と同じでなければなりません。
具体的な例を元に説明してみましょう。
// test/SampleClass.as package test { public class SampleClass { // SampleClass の定義 } } class foo { // foo の定義 } function bar():void { // bar の定義 }
この例では、package test{...} の中に1つのクラスがあり、クラス名 SampleClass がファイル名の SampleClass.as と同じです。package test{...} の中に他のクラスや関数、変数、名前空間を含めることはできません。
残りの定義は package test{...} の外で行っています。foo クラスや bar 関数のように、いくつでも定義できますが、ファイル外からは一切参照できない点に注意してください。
まとめると、
- 別ファイルに公開するクラスや関数は、パッケージ宣言に書く
- パッケージ宣言は1つのソースファイルにつき、クラス・関数・変数・名前空間のうち、ただ1つの定義しか含めることができない
となります。
パッケージの public や internal も絡みあうと複雑なので、図にまとめてみました。
← | パッケージ内の public なクラスはどこからでも参照できる |
← | パッケージ内では public/internal のクラスで相互参照できる |
← | 同じファイル内のクラスは参照できる |
注意すべきは...
- class _I から class I は参照できない
- class _I は package sample とは別のパッケージに存在するため、package sample の internal なクラスの参照に失敗する。
- 別のパッケージ(Test.as)からは class P のみ参照できる
- internal なクラスおよびパッケージ宣言外で宣言されたクラスは参照できない。
続編を書きました。