TC官方合作论坛

标题: 浅谈TC命名空间 [打印本页]

作者: zxyc2000    时间: 2012-5-14 08:56
标题: 浅谈TC命名空间
本文谈谈我对TC命名空间的理解。希望官方能够给出更权威、详细的说明。(以下内容均属个人理解,望指正)
一、命名空间即对象?
TC的帮助文档里几乎没有涉及对象的概念,当我们写一个脚本的时候可能想不到任何跟面向对象相关的东西。但是TC中的对象是存在的,见下例。
创建项目test3,再创建另外一个命名空间myObject。代码如下:
  1. #include "myObject.t"
  2. namespace test3

  3. function thread1(name)
  4.         myObject.setName(name)
  5.         help.sleep(2000)
  6.         return true
  7. endfunction

  8. function thread2(param)
  9.         help.sleep(2000)
  10.         help.messagebox(myObject.getName())
  11.         return true
  12. endfunction

  13. function start_click()
  14.         thread.beginthread("test3.thread1","MyName")
  15.         thread.beginthread("test3.thread2","")
  16.         return true
  17. endfunction

  18. function exit_click()
  19.         help.exit()

  20.         return true
  21. endfunction

  22. endnamespace
复制代码
  1. namespace myObject

  2. name

  3. function setName(n)
  4.         name = n
  5.         return true
  6. endfunction

  7. function getName()
  8.         return name
  9. endfunction

  10. endnamespace
复制代码
test3中有两个线程,线程thread1用来设置命名空间myObjectName属性,线程thread2用来获取myObjectName属性,程序运行的结果thread2得到的值永远与thread1设置的属性保持一致。很多人已经知道这一特性,这条特性是非常重要也非常有用的,这也是线程间传递数据的一种很有效的方法。
关于命名空间另外一个有趣的特性是,当我们双击点开项目生成的exe时,自定义命名空间中的属性和方法便可以使用了,直到我们关闭exe文件,自定义命名空间中的属性和方法才会被销毁。
命名空间具有如此特性的原因便是:当程序执行时,自定义的命名空间会作为全局对象(代表窗口程序的对象)的一个内部对象而初始化,自定义命名空间的属性就是该对象的属性,自定义命名空间的方法就是该对象的方法,任何对自定义命名空间的操作都会反映在该对象上。这个对象是唯一的,而且只有在全局对象被销毁时,与全局对象一同销毁。
二、命名空间与TC
使用TC的朋友肯定会跟TC库打交道,TC库分为两个大类,一个是功能类库,包括对键鼠、窗口等功能类方法的操作,另一个是控件操作类库,包括对标签、编辑框等控件的操作。无论是使用功能类库中的help.messagebox(“Msg”)弹出窗口,还是使用控件类库中的edit.gettext(“editName”)获得文本框内容,这些方法的调用形式与自定义命名空间中的函数可以说一模一样:命名空间名.方法名(参数列表),参考前面例子中的myObject.setName(name)方法。无论是在项目的主空间,还是在自定义命名空间中,都可以使用help.messagebox(“Msg”)edit.gettext(“editName”)这样的方法,说明helpedit这类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