对于一般程序语言,执行分为3种:
1)编译成二进制机器代码,由操作系统调用执行;典型的如C,C++,Delphi等.
2)编译成中间语言,由虚拟机解释来执行或及时编译后执行(前者的典型是java,后者的典型是DotNet).
3)不进行编译,有解释器边解释边执行,比较典型的是VB和HTML,Javascript.等
上边这些与WPF有关系么?其实是有的,至少原理上非常相似.大家来看看WPF的XAML的执行机制:
1)首先是实例化页面类;
2)然后构建界面元素(控件树),这里很关键,因为xaml文件里有界面元素的描述性信息,对于一个界面元素E:
A)首先实例化E,知道界面元素的类名,利用反射机制很容易实例化该类.
B)设置属性,同样利用反射机制,将字符串描述的属性值设置赋给实例,这个原理很简单,但要做得很好,是需要一个简单的解释器的.
C)属性可以挂接,事件也当然可以动态挂接,但一般情况下,事件挂接时目标方法只能在页面实例里。
D)到此,一个界面元素就内存实例化了,然后放入当前页面的控件树里。实例化界面元素本来就是递归完成的,控件树的完成比较容易。
当然最后,会将有Name的元素实例赋给页面类实例里相应的成员变量,这样页面代码方法里应用该控件的代码就能正常执行了。这种执行机制与上面提到的3种方式中的第3种方式非常类似。页面元素属性(包括事件)的描述和具体页面代码分开的方式,很多地方都采用,比如Aspx,Dfm等。