Flash CS3 ドキュメンテーション |
|||
| ActionScript 2.0 の学習 > クラス > アプリケーションでのカスタムクラスの使用について > ダイナミッククラスについて > ダイナミッククラスの作成 | |||
デフォルトでは、クラスのプロパティとメソッドは固定です。つまり、クラスのインスタンスが、そのクラス内で宣言または定義されているプロパティやメソッド以外のものを作成したり、アクセスしたりすることはできません。たとえば、userName と age の 2 つのプロパティを持つ Person クラスを考えます。
class Person {
public var userName:String;
public var age:Number;
}
別のスクリプト内でこの Person クラスのインスタンスを作成し、このクラスの存在しないプロパティにアクセスしようとすると、コンパイルエラーになります。
firstPerson) を作成し、Person クラスに存在しない hairColor というプロパティに値を代入します。var firstPerson:Person = new Person(); firstPerson.hairColor = "blue"; // エラー。"hairColor" という名前のプロパティはありません。
Person クラスは hairColor という名前のプロパティを宣言していないので、このコードはコンパイルエラーになります。ほとんどの場合、これは期待どおりの動作であるはずです。コンパイルエラーというと悪いことのように思えますが、プログラマにとっては非常に有益な情報です。エラーメッセージによってコード作成時のミスが早めに指摘されるので、正確なコードを効率よく作成することができます。
場合によっては、オリジナルのクラス定義に含まれていないプロパティやメソッドを実行時に追加して、アクセスする必要が生じる場合があります。その場合に使用するのが dynamic クラス修飾子です。
dynamic class Person2 {
public var userName:String;
public var age:Number;
}
この ActionScript では、dynamic キーワードを前述の例の Person クラスに追加します。Person2 クラスのインスタンスでは、このクラスで定義されていないメソッドやプロパティを追加しアクセスすることができます。
firstPerson) を作成し、Person2 クラスに存在しない hairColor というプロパティに値を代入します。var firstPerson:Person2 = new Person2(); firstPerson.hairColor = "blue"; trace(firstPerson.hairColor); // 青
このカスタム Flash クラスはダイナミックなので、実行時にメソッドとプロパティをクラスに追加することができます (SWF ファイルの再生時)。コードをテストすると、テキスト blue が [出力] パネルに表示されます。
アプリケーションを開発するときは、必要でない限り、クラスはダイナミックにしないでください。ダイナミッククラスを使用しない理由の 1 つとして、クラス定義内およびクラスインスタンス内部でアクセスされるメンバーは、クラススコープ内のメンバーと比較されないので、ダイナミッククラスに対する型チェックは、非ダイナミッククラスの場合よりも寛容になる点があげられます。ただし、その場合でも、クラスメンバー関数の戻り値とパラメータの型に対しては、型チェックが実行されます。
ダイナミッククラスのサブクラスもダイナミックになりますが、例外が 1 つあります。MovieClip クラス自体はダイナミックですが、MovieClip クラスのサブクラスはデフォルトではダイナミックになりません。この実装により、MovieClip クラスのサブクラスをダイナミックにするかどうかを選択できるようになっているので、サブクラスをより柔軟に制御できます。
class A extends MovieClip {} // A は非ダイナミック
dynamic class B extends A {} // B はダイナミック
class C extends B {} // C はダイナミック
class D extends A {} // D は非ダイナミック
dynamic class E extends MovieClip{} // E はダイナミック
サブクラス化の詳細については、継承を参照してください。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート
現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000786.html