在qiuhao上我回复一个网友的贴子,但觉的这里可以展开的点很多。
在窗体编程中,element 通常就是指formrun 也就是我们看到的form
你在为哪个对象编写代码,this就是哪个对象,比方说你为formbuttoncontrol写click方法,则this就是指这个按钮,如果我们覆盖form的init方法,那么里面的this其实就是element
深入探讨这个就是ax的代码生成机制有关了,ax为了达到分层的目的,没有采用现在编程中的事件机制,而是用继承的方式,当创建一个窗体,增加一个按钮时,其实就是生成一个类
class Form1 extends SysSetupFormRun{
private Form1 element=this;
public Button1 Button1; //如果Button1的authdeclartion为yes,则会声明这行
void init(){
super();
//这里this 是form1范围,也就是element,两者一样
}
class Button1 extends FormButtonControl{
void clicked(){
super();
//你的代码
print classId2Name(classIdGet(this)));
print element.name();
}
}
}
看这个生成的代码,就会了解ax 中this,element的具体指向了
不过上面代码仅是个人推测,但这种编码在java语言中是会通过的,c#就不行,因为对内部类的处理机制不一样,而且c#也不允许Form1 element=this这样的变量声明, 这其实告诉我们,对比语言时得确有个此长彼短的问题。不能简单的评定谁好谁坏。
上次,有网友问我,我的blog上说所的填空式代码生成是什么意思。其实我所说的就是ax的代码生成机制,在ax中,只有方法覆盖是编程者接触的(参见加黑的部分),其它地方是编程者所不触及的。这通过提供类似ax aot的窗口可以实现。填充式代码生成更易于达到封闭代码,减少出错点,提高效率的目的