马上加入TC
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本文谈谈我对TC命名空间的理解。希望官方能够给出更权威、详细的说明。(以下内容均属个人理解,望指正)
一、命名空间即对象? TC的帮助文档里几乎没有涉及对象的概念,当我们写一个脚本的时候可能想不到任何跟面向对象相关的东西。但是TC中的对象是存在的,见下例。 创建项目test3,再创建另外一个命名空间myObject。代码如下:
- #include "myObject.t"
- namespace test3
- function thread1(name)
- myObject.setName(name)
- help.sleep(2000)
- return true
- endfunction
- function thread2(param)
- help.sleep(2000)
- help.messagebox(myObject.getName())
- return true
- endfunction
- function start_click()
- thread.beginthread("test3.thread1","MyName")
- thread.beginthread("test3.thread2","")
- return true
- endfunction
- function exit_click()
- help.exit()
- return true
- endfunction
- endnamespace
复制代码- namespace myObject
- name
- function setName(n)
- name = n
- return true
- endfunction
- function getName()
- return name
- endfunction
- endnamespace
复制代码test3中有两个线程,线程thread1用来设置命名空间myObject的Name属性,线程thread2用来获取myObject的Name属性,程序运行的结果thread2得到的值永远与thread1设置的属性保持一致。很多人已经知道这一特性,这条特性是非常重要也非常有用的,这也是线程间传递数据的一种很有效的方法。 关于命名空间另外一个有趣的特性是,当我们双击点开项目生成的exe时,自定义命名空间中的属性和方法便可以使用了,直到我们关闭exe文件,自定义命名空间中的属性和方法才会被销毁。 命名空间具有如此特性的原因便是:当程序执行时,自定义的命名空间会作为全局对象(代表窗口程序的对象)的一个内部对象而初始化,自定义命名空间的属性就是该对象的属性,自定义命名空间的方法就是该对象的方法,任何对自定义命名空间的操作都会反映在该对象上。这个对象是唯一的,而且只有在全局对象被销毁时,与全局对象一同销毁。 二、命名空间与TC库 使用TC的朋友肯定会跟TC库打交道,TC库分为两个大类,一个是功能类库,包括对键鼠、窗口等功能类方法的操作,另一个是控件操作类库,包括对标签、编辑框等控件的操作。无论是使用功能类库中的help.messagebox(“Msg”)弹出窗口,还是使用控件类库中的edit.gettext(“editName”)获得文本框内容,这些方法的调用形式与自定义命名空间中的函数可以说一模一样:命名空间名.方法名(参数列表),参考前面例子中的myObject.setName(name)方法。无论是在项目的主空间,还是在自定义命名空间中,都可以使用help.messagebox(“Msg”)与edit.gettext(“editName”)这样的方法,说明help与edit这类TC内置功能,像自定义空间一样,储存在全局对象中,表示功能的一部分调用系统api,另一部分通过关联,操作界面上的控件。我们甚至可以将TC内部的各个类库与自定义命名空间看作是等价的。 可以想象,如果TC想要新增加一种超链接控件,除了界面上增加超链接控件的设计部分外,还在程序的启动过程中,加入对应超链接操作的“命名空间”。如果想要为picture(图片框)控件增加一个设置大小的方法,则需要在picture命名空间中加入实现设置图片大小的方法。
(本来画了一个TC程序的生命周期图的,但是编辑控件有问题,无法上传图片,维护好了会补发上来。)
|