程序化的财产访问

时间:2014-04-11 17:29:07

标签: actionscript-3 properties

我正在编写一个包含几个用于创建生成图形的类的包。生成对象的外观由getter / setter控制,并通过调用'getData'方法检索图形,该方法以Vector.<IGraphicsData>的形式返回对象的表示。

我想创建一个类LinkedGenerator,它可以同时控制指定生成器类型的多个副本。例如,可以告诉该类控制CircleGenerator类的多个副本。 LinkedGenerator将拥有一个属性,其中包含它将控制的CircleGenerator表示的数量,因此可以使用一种方法处理每个副本的外观,该方法将在总副本数中映射出一个外观属性的值 - 我们可以有一个功能如下:

function color(currInstance:int):uint {
    return (0xff0000 * currInstance / linkedGen.numInstances);
}

然后迭代副本数量并获得如下表示:

var graphicsRep:Vector.<IGraphicsData> = new Vector.<IGraphicsData>();
for(var i:int = 0; i < linkedGen.numInstances; ++i) {
    circGen.color = color(i);
    graphicsRep = graphicsRep.concat( circGen.getData() );
}
//now pass graphicsRep to the object where it will be drawn

然而,这会产生一些问题,我的方法是控制实例化生成器的外观 - 我不能保证LinkedGenerator可以使用哪些getter / setter而不对要托管的生成器类型进行硬编码,但需要有一些控制它们的方法。有没有比我在这里提供的更好的方法来实现这个目标?有没有办法确保属性存在于类中,并且有一个对应于指定属性的变量(例如,属性数组,所以我可以设置像propertyArray[colorPropertyIndex] = newValue这样的颜色)?

1 个答案:

答案 0 :(得分:0)

如果你不能将它们重写为所有实现相同的接口,那么将它们全部包装在实现相同接口的东西中。然后控制器将调用包装器,每个包装器将知道如何访问每个包装。