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