get set キーワードは、プロパティに直接アクセス出来るように見えて、そのアクセサをちゃんと用意してあげられるので、コード的の見た目的にいい機能だなと思っていたんですが、get set キーワードで作るアクセサは、その型を一致させる必要があるみたい。
- class SuperClass0
- {
- // ...
- }
- class SubClass0 extends SuperClass0
- {
- // ...
- }
- //-----------------------------------------------------------
- // get set キーワードを使う場合(エラーになる)
- //-----------------------------------------------------------
- class SuperClass1
- {
- protected var _class0:SuperClass0;
- protected function set class0(value:SuperClass0):void
- {
- _class0 = value;
- }
- }
- class SubClass1 extends SuperClass1
- {
- protected function get class0():SubClass0
- {
- return SubClass0(_class0);
- }
- }
- //-----------------------------------------------------------
- // 関数を定義する場合
- //-----------------------------------------------------------
- class SuperClass2
- {
- protected var _class0:SuperClass0;
- protected function setClass0(value:SuperClass0):void
- {
- _class0 = value;
- }
- }
- class SubClass2 extends SuperClass2
- {
- protected function getClass0():SubClass0
- {
- return SubClass0(_class0);
- }
- }
とあるクラスのインスタンスを親クラスに持たせておいて、派生クラスで利用するときは、必要な型にキャストして利用しようとしたんだけど、get だけキャストして型を変えたりすると、『Error: Accessor types must match.』とエラーが出ます。
set を子クラス毎に用意したらいい話なんやけど、親クラスにもたせてあげれば用意する必要のない setter を作るのも好ましくない。get set キーワードで作成したアクセサは、クラス内で参照するのにも利用するし、コード的にも綺麗。関数を用意すると大丈夫なんだけど、クラス内で使うにはちょっと不恰好だなぁとか。
0 件のコメント:
コメントを投稿