TC官方合作论坛
标题: 浅谈TC命名空间 [打印本页]
作者: zxyc2000 时间: 2012-5-14 08:56
标题: 浅谈TC命名空间
本文谈谈我对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程序的生命周期图的,但是编辑控件有问题,无法上传图片,维护好了会补发上来。)
作者: mahua1130 时间: 2012-5-14 09:10
写的很详细,不错,又学到了。
作者: tyuyan 时间: 2012-5-14 09:24
来看下。。 很详细的说。
作者: 战地之王 时间: 2012-5-14 10:21
楼上用心了,感谢楼主。
作者: 清风流水2060 时间: 2012-5-14 11:10
顶贴
作者: TakeBobo 时间: 2012-5-14 11:37
学习了 。 楼上分析的很好哦!
作者: ltsi001 时间: 2012-5-14 11:59
看不太懂
作者: zxyc2000 时间: 2012-5-14 12:13
回复 7楼ltsi001的帖子
接近底层的东西,确实不容易理解。
我相信能够熟练使用TC之后再来看这篇文章,会有很大帮助。
作者: 战斗之神 时间: 2012-5-14 14:06
这样楼主的分享,我慢慢去理解
作者: 最爱念 时间: 2012-8-9 14:07
TC程序的生命周期图啥时候补上哦
作者: zxyc2000 时间: 2012-8-9 15:42
回复 10楼最爱念的帖子
竟然还有人关注 
你是真学者
作者: 最爱念 时间: 2012-8-9 17:47
回复 10楼最爱念的帖子
竟然还有人关注 
你是真学者
zxyc2000 发表于 2012-8-9 15:42:04 
汗,为啥不能关注咧,最近忙的很,学东西都断断续续的,进展很是缓慢啊郁闷,能有个分身就好了
作者: 逍遥散 时间: 2012-8-25 18:52
不懂
作者: scj2zxy 时间: 2012-8-28 06:21
学习
作者: zc317414 时间: 2012-9-16 15:55
学习中!
作者: zc317414 时间: 2012-9-16 16:15
学习 多线程深奥!
作者: 爱玩的一休 时间: 2012-9-16 18:53
感觉就是个全局变量啊,难道我feeling错了?
作者: 单纯的狼 时间: 2012-10-3 23:08
做个标记 似懂非懂的 慢慢来 顺便什么时候补图啊
作者: w403593860 时间: 2013-5-30 13:54
还 是不懂哦。亲。
作者: 哎呀妈呀 时间: 2013-8-13 09:00
学习学习,呵呵
作者: kam 时间: 2014-1-22 22:48
我是个菜鸟,经过这两天的学习,我觉得子界面可以当作给自己封装了一个插件来用.只调用里面的函数什么的.感觉和插件很相似
欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) |
Powered by Discuz! X3.1 |