我相信你在这里遇到了一个设计问题,你可能可以避免想要或者需要做一些重构代码的工作。也许你可以将skin
和avBody
合并成一个类?你可以决定,现在让我们假设重新设计不是解决方案。
不幸的是,因为函数重载是不是在AS3可能的,像下面这样的解决方案也是不可能的,因为覆盖必须具有相同的特征:
override public function set x(value:Number, caller:*):void
{
if (caller is AvBody)
super.x = value;
}
//Error: Incompatible override.
你可以简单地覆盖x
和y
制定者,显示ArgumentError
如果他们被调用,而是使用x
和y
属性的自定义内部设置器,即使它有点贫民窟。
override public function set x(value:Number):void
{
throw new ArgumentError("Can not set public 'x' property on Skin class. Set internal 'posX' property instead");
}
override public function set y(value:Number):void
{
throw new ArgumentError("Can not set public 'y' property on Skin class. Set internal 'posY' property instead");
}
internal function set posX(value:Number):void
{
super.x = value;
}
internal function set posY(value:Number):void
{
super.y = value;
}
如果我理解的很好,有一个对象A具有皮肤和身体属性。但身体是唯一应该修饰皮肤的。我对吗 ?那么,为什么皮肤是“A”物体的属性而不是身体的属性呢? – David 2011-06-16 08:53:46
身体可能代表一个物理身体,而皮肤是视图/动画片段。因此,如果皮肤是身体的一种属性,它会产生高度的耦合。 – Shannon 2011-06-16 15:30:12