2012-11-14 305 views
0

请参考后指定接口ICellRenderer的: Display checkbox inside Flash List Control ? (Similar to itemrendering in Flex)有什么用在这种情况下

像往常一样,我总是得到与接口的意义有些困惑。

所以在上面的链接,我还是不明白什么是指定ICellRenderer

为什么可以不替代的意义:

public class CustomCellRenderer extends CheckBox implements ICellRenderer 

我可以写

public class CustomCellRenderer extends CheckBox 

我试图玩上面的线,但它不工作。我必须指定ICellRenderer。

在我看来,接口,只是告诉一个类遵循一定的使用函数的规则。它如何能够阻止班级的工作(如果我已经使用了所有必要的功能,但没有实现所需的接口)

Thnx提前。 Vishwas。

回答

1

由于检查对象上的其他代码没有实现接口,可能会导致失败。然而这也是接口的优点,你的类不需要从某个东西延伸来实现一个接口,所以它可以任意扩展任何类,但实现一个特定的接口,这意味着它具有一些其他功能从它的继承链中获得。所以的Adobe(或任何人)代码的东西像:

if(argumentObject is ICellRenderer) 
{ 
    var icr:ICellRenderer = argumentObject as ICellRenderer; //cast so code completion can work 
    icr.data = data; //do some stuff on the object that only an ICellRenderer can do 
} 

让我知道,如果这种解释是不明确的,我花了很长的时间来与接口及其使用交手,但现在我一个巨大的倡导者。

论据

只要继承本身而言,只是为了清晰的概念是,如果事情就像别的东西,但与它相关联的额外的属性(名词)或行动(动词),你不需要重新编写通用部分。

要使用一个常见的例子说你有一个类动物(属性如isAlive,行为如重现)。现在说你想为SexualAnimal和AsexualAnimal创建一个类,并且在SexualAnimal的重现方法需要一个参数,而AsexualAnimal的重做方法不会(SexualAnimal会有重载方法的重载版本,并且会覆盖默认的抛出错误)。好吧,现在我们已经到达鸟类的某个地方,现在我们可以选择如何处理航班,我们可以在继承链中添加航班作为布尔值,或者B创建航班界面(也许我们并不关心遗传树中的哪一个动物,我们只是想知道它可以飞行,因此具有某些属性,如高度和像takeFlight一样的动作)。而不是检查你想要在飞行物上使用的每个单独的财产,你可以检查是IFlyingThing。

另一种看待这个问题的方法是,作为一名程序员,我可以编写一个接口给另一个团队,我们都可以根据接口中建立的“契约”进行操作。比如说我需要访问一个数据库来完成一些操作,但我不知道哪个数据库解决方案会长期执行。因此,我为我需要的数据库编写接口,以便能够使用X参数获取Y数据,现在,我可以自由地在我提供X的假设下自由编写其余代码,并且您给我Y,不管是什么我的代码的基础实现将起作用。

为了更正式引用的接口的用途看:http://en.wikipedia.org/wiki/Design_Patterns

+0

如果这样的检查是不存在的。不是完全可以避免的接口? 例如,“继承”的概念也是可以避免的,但是它们的优点可以被看作是“干净的”代码生成。 但是,在“接口”的情况下,它在我看来都不是一个干净的代码。它只是“强制”一条规则,以便编译器可以在编译时停止。 (因此,程序员必须纠正错误,并做出成功的编译) –

相关问题