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 件のコメント:
コメントを投稿