delphi引用本单元的函数,该加什么前缀呢?

haitao 2009-11-16 04:41:54
delphi引用本单元的函数,该加什么前缀呢?
self是本对象,unitABC是别的单元(unitABC)
如果是本单元,除了了写死本单元的文件名unitXXX,有没有通用的一个引用名呢?
记得c++好像是使用“::”。

不想写死本单元的文件名unitXXX,因为万一以后单元名需要修改为unitXYZ了,这样写就会导致内部这些地方(unitXXX.fun123)也都需要修改,不够方便


——使用了10多年delphi,才第一次想起问这个问题。。。。。。。。。
...全文
326 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
hylf1985 2011-10-12
  • 打赏
  • 举报
回复
新手彷徨中
haitao 2009-11-17
  • 打赏
  • 举报
回复
至于钻牛角尖,本来就是通过一个具体场景、事例讨论语言的待增强之处
意义在于提出了 需要SelfUnit这样的一个与this/self/result类同的通用替代词
而不是单纯解决本次的的具体问题(可以 加一个单元名 或 修改函数名 来绕开)
同时提到了 引用别名制 的优点:本来要修改n+1个地方,变成了只需要修改1个地方
UndefinedCoder 2009-11-17
  • 打赏
  • 举报
回复
C的::是全域操作符,表示没有指定命名空间的标志符,并不是说调用本源码文件的函数什么的。什么问题都好解决,不必去钻牛角尖。改名就是了。
7年 2009-11-17
  • 打赏
  • 举报
回复
个人意见:函数什么的都写到一个unit里得了。
林石公 2009-11-17
  • 打赏
  • 举报
回复
如果你文件名改了,代码都不动的可能性好像不大吧,uses的单元至少要变变才行似的,
本单元的引用,如果是非类/对象函数或过程,应当不需要指明单元名就可以了
Harryfin 2009-11-17
  • 打赏
  • 举报
回复
不过貌似偏题了,不能只是看这个问题
Harryfin 2009-11-17
  • 打赏
  • 举报
回复
我建议楼主用cxtreelist吧,一下就实现你要的效果了,非常简单。

为何非要用stringgrid呢?
Harryfin 2009-11-17
  • 打赏
  • 举报
回复
问问cnPack吧。
好像能取到当前unit,然后再看看,能不能取unit里的函数塞。
DesignIDE
呵呵,高手好好研究哈。
---------------------------------
这个是不一样的,cnpack用的是IOTA方面的接口,用于和IDE交互。跟楼主这个需求无关,因为楼主不是只是想拿单元名。
Harryfin 2009-11-17
  • 打赏
  • 举报
回复
其实我提个中肯点的意见吧

我觉得楼主这方面的问题应该要用管理的角度来解决,为什么老要修改单元名(或者类名)?这样的代价是必须自己负的。你可以考虑一些重构的工具,利用它们来进行类名的修改。当然,单元名(命名空间)我不知道一般的重构工具能不能进行批量修改了。

另外其实你可以查找项目组,把单元名批量替换就可以了,也不是很麻烦。

至于类为什么要有Self,是因为类会被创建出多个实例,并不是说要应付改名。从这点就可以说明为什么有Self而没有SelfUnit了(程序语言发展到今天,C#,JAVA好像也重来没听说过需要SelfUnit的,C#的命名空间比Delphi的单元名要长的多了)
zzj850902 2009-11-16
  • 打赏
  • 举报
回复
mark
haitao 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 preserve 的回复:]
就用单元名好了啊

c++里没有单元的概念 ::是指定作用域的范围
[/Quote]

两者的概率当然不一样
但是前面不含类名的::,就是表示NotThis
haitao 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 jinhx 的回复:]
在delphi好像用self就行了,也只有在定义过程或函数时才用到 TForm1 之类的用法,而且unitxxx也只不过是一个单元名称甚至只是文件名,在源代码的实现部分没有任何作用
[/Quote]

这个例子需要的其实是 NotSelf.fun1,表示fun1不是self的方法,而是单元里的函数
preserve 2009-11-16
  • 打赏
  • 举报
回复
就用单元名好了啊

c++里没有单元的概念 ::是指定作用域的范围
jinhx 2009-11-16
  • 打赏
  • 举报
回复
在delphi好像用self就行了,也只有在定义过程或函数时才用到 TForm1 之类的用法,而且unitxxx也只不过是一个单元名称甚至只是文件名,在源代码的实现部分没有任何作用
Seamour 2009-11-16
  • 打赏
  • 举报
回复
不冲突啊,类函数和普通的成员函数又不一样
要是非用最原始的手段提供函数,那就也用最原始的手段给函数名前加统一前缀呗
haitao 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 seamour 的回复:]
封装到 class 里,写成类函数

[/Quote]

想同时给开发者提供普通函数的实现手段和类的实现手段。。。。。。。
Seamour 2009-11-16
  • 打赏
  • 举报
回复
封装到 class 里,写成类函数
iamduo 2009-11-16
  • 打赏
  • 举报
回复
问问cnPack吧。
好像能取到当前unit,然后再看看,能不能取unit里的函数塞。
DesignIDE
呵呵,高手好好研究哈。
apilove 2009-11-16
  • 打赏
  • 举报
回复
学习学习
haitao 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 harryfin 的回复:]
因为有些函数是先写为普通函数,然后进一步做了一个类,有有这些同名的方法,而且调用的就是那些普通函数
-----------------------
不是很明白,可以举个例子吗。对象方法的调用和普通方法的调用应该不会重名吧,除非程序用了with,那有可能判错。
[/Quote]

我想实现一个带tree列的grid,先实现几个函数,为stringgrid增加tree的效果
然后,把它们集成到一个类,以方便使用,这个类的方法,调用的就是原来的函数
function funABC(...)
begin
end;

Ttreegrid.funABC(...)
begin
{thisUnit.}funABC(...); //这里优先调用的是方法而不是函数
end;


加载更多回复(8)
Delphi 6 程序员代码编写标准指南 一、序言 二、通用源代码格式规则 2.1 缩格 2.2 页边空格 2.3 Begin…End 配对 2.4 代码文件中通用符号含义 三、Object Pascal 3.1 括号 3.2 保留字和关键字 3.3 过程和函数(例程) 3.3.1 命名/格式化 3.3.2 形式参数 3.3.2.1 格式化 3.3.2.2 命名 3.3.2.3 参数的排序 3.3.2.4 常量参数 3.3.2.5 名称的冲突 3.4 变量 3.4.1 变量的命名和格式 3.4.2 局部变量 3.4.3 全局变量的使用 3.5 类型 3.5.1 大写约定 3.5.1.1 浮点指针类型 3.5.1.2 枚举类型 3.5.1.3 变数和ole变数类型 3.5.2 结构类型 3.5.2.1 数组类型 3.5.2.2 记录类型 3.6 语句 3.6.1 if 语句 3.6.2 case 语句 3.6.2.1 一般性话题 3.6.2.2 格式 3.6.3 while 语句 3.6.4 for 语句 3.6.5 repeat 语句 3.6.6 with 语句 3.6.6.1 一般话题 3.6.6.2 格式 3.7 结构异常处理 3.7.1 一般话题 3.7.2 try…finally的使用 3.7.3 try…except的使用 3.7.4 try…except…else的使用 3.8 类类型 3.8.1 命名和格式 3.8.2 域 3.8.2.1 命名/格式 3.8.2.2 可视化 3.8.3 方法 3.8.3.1 命名/格式 3.8.3.2 使用静态的方法 3.8.3.3 使用虚拟/动态的方法 3.8.3.4 使用抽象的方法 3.8.3.5 属性存取方法 3.8.4 属性 3.8.4.1 命名/格式 3.8.4.2 使用存取的方法 四、文件 4.1 工程文件 4.1.1 命名 4.2 窗体文件 4.2.1 命名 4.3 数据模板文件 4.3.1 命名 4.4 远端数据模板文件 4.4.1 命名 4.5 Unit文件 4.5.1 通用Unit结构 4.5.1.1 unit的名字 4.5.1.2 uses子句 4.5.1.3 interface部分 4.5.1.4 implementation部分 4.5.1.5 initialization部分 4.5.1.6 finalization部分 4.5.2 窗体单元 4.5.2.1 命名 4.5.3 数据模板单元 4.5.3.1 命名 4.5.4 一般目的单元 4.5.4.1 命名 4.5.5 构件单元 4.5.5.1 命名 4.6 文件头 五、窗体和数据模板 5.1 窗体 5.1.1 窗体类型命名标准 5.1.2 窗体实例命名标准 5.1.3 自动创建窗体 5.1.4 模式窗体实例化函数 5.2 数据模板 5.2.1 数据模板命名标准 5.2.2 数据模板实例命名标准 六、包 6.1 使用运行包和设计包的比较 6.2 文件命名标准 七、构件 7.1 用户自定义构件 7.2 构件单元 7.3 使用注册单元 7.4 构件实例命名约定 7.5 构件的前缀 7.6 Standard 页 7.7 Additional 页 7.8 Win32 页 7.9 System 页 7.10 Internet 页 7.11 Data Access 页 7.12 Data Controls 页 7.13 Decision Cube 页 7.14 Qreport 页 7.15 Dialogs 页 7.16 Win3.1 页 7.17 Samples 页 7.18 ActiveX 页 7.19 Midas 页 7.20 ADO 页 7.21 InterBase 页 7.22 InternetExpress 页 7.23 FastNet 页
注意,此版本不包含源代码,只是一个绿色的可以随时打开的版本,开发工具为:delphi7+sqlserver2000我的PDF(Perfect Developer Frame),想要 简单,快速,健壮,因此我用的还是C/S结构,因为客户可不管你用的是什么最高新的技术!经过一两年的完善,以及几个小的项目的使用,基本上还能拿得出客户正式使用!现在拿出来征求大伙的意见,看看在哪方面还要做改进,以达到更好...如果您的意见很好,被我们实现在PDF上,那么您就可以得到一份PDF 插件版的源代码.诚心希望与您的交流:EMAIL:kingjit@163.comMSN:kingjit@163.comQQ:112876992=================================================本系统使用了绿色SQLSERVER 4.0,只供下载学习,版权归微软公司所有请下载后24小时内删除系统使用方法(纯绿色版本):1.下载并解压2.打开目录下的SERVERadmin.exe,并确保数据库已经启动3.打开CLIENTXiandi.exe即可使用,密码为空这个版本是没有完成的版本,但材料的进销存还是可以用的,请帮助测试==============================2005-10-12 jacky 第一次做开发记录以前所有的都没有做开发记录,所以很多功能都写了而无法查证,所以希望以后能坚持写下去,保留一份最完整的开发记录供后人查阅.*BUG:在单据审核后使用反审核及新增单据都会报已被审核不能修改.*NEW:单据在审核或反审核,结单或反结单时都会被记录在UserLog记录中.*NEW:新增公共部分的部门和人员表,以便在其他的功能中使用.*NEW:如果在编辑状态在GRID中移动,并且定义了Button的OnClick事件,则会自动触发 但要注意,只能在Col中增加Button并写事件或者在Col的OnButtonClick中写事件才行,在Grid的onButtonClick事件中写代码,则不会触发,要注意2005-10-14 jacky*NEW:把系统改为简繁自动切换界面的软件,界面用SILANG处理,报表用RMLOCAL.LOADDLL处理,UNIT里面用CS函数转换字符串*NEW:新增一个工具,LangTrans,来自动转换SIL语言文件,默认第一个语言是简体,第二个语言是繁体的转换2005-10-15 jacky*NEW:新增单据,会自动根据BILLTYPE及TABLE等自动生成BILLNO的生成格式信息,前缀默认为B开头*BUG:通用查询,过滤,报表窗口的DFM文件都有错误,不是OBJECT开头而是inherted*NEW:LangTrans完成*BUG:TFrmSysLog中,给尚未登出人员设置颜色时,没有检测FIELD是否存在,所以出错*NEW:在模版中创建FORM时就查询Dataset中是否有被LOOKUP的字段,如果有,则其FIELD的默认值填0,函数放在FUNCTION中*BUG:在审核时,会跳到编辑界面*NEW:把单据的录入窗口中,子表的录入新增按钮等放到GRID的右边*NEW:主界面的状态栏改为9号字,看起来好看多了*NEW:单据中的字段现在也可以是常用的固定FIELDNAME自动转换成常用的中文标签*BUG:BILL模版中,结单的状态文字,错误的打成审核了*BUG:系统经常出现错误,及不稳定现象,应该是内存泄露,正在查...2005-10-16 jacky*BUG:内存泄露的问题,稍稍解决了一些,是否经得住考验还得测试*BUG:我觉得主从表好象有问题,查询从表的时候,总是不带条件的,这样从表记录多了,该如何是好啊!所以想改一下其打开的方式*NEW:OK搞定主从表重新的方式取得数据,从表不会出现没有条件的select * from detail table*NEW:以前是在DATASET的FIELD中设置只读,则表格标题为红色,必须有值,则标题显示蓝色,现在如果GRID的COLUMN也是只读,则也显示红色.*NEW:上面说的功能,把它写在了一个函数中,SetGridTitleColor,而且只在Dataset的AfterOpen中执行一次,这样程式的性能应该会有提高.2005-10-16 jacky*BUG:主窗口的状态栏上显示文字的格子不够宽,加宽一些2005-10-18 jacky*TODO:在主窗口的功能列上,在功能项上按右键,应该有一个加入收藏夹的功能*记忆:在FIELD的DEFAULTEXPRESS中填DATE表示默认当前日期*NEW:把KU中SELECT相关的过程中,设置表格宽度的参数部分,如果为负数,则不改变默认宽度*NEW:在功能项目上按右键,即有菜单把项目加入到收藏夹中*NEW:AccountManager已经被改成双语版的了2005-10-23 jacky*TODO:新增一张单据的具体操作步骤如下: 1.从uBaseBill模版中继承建立一个FORM 2.建立好主从表,并且主从表的关键字都是固定名称:BillNO 3.把类名称改名,并保存单元,然后从自动建立列表中移除 4.在REGUNIT中注册此类 5.在MenuMoudle中建立一个菜单项,其中HINT要写上刚刚注册的类名称即可 6.ADSMain中commandtext,在FROM 后面加上主表名称 7.ADSDETAIL的commandtext中一般只要写上"select * from 子表名称",即可 8.调整各dataset中字段显示的名称,及表格中的位置等等,后面做的工作就可以很灵活了,如添加LOOKUP字段及做统计等等工作了2005-10-25 jacky*NEW:旧的万能过滤感觉不太好使,所以换成了EHLIB自带的万能过滤,不知道好不好用*BUG:没有登录的情况下是不可以点收藏夹右键的*BUG:没有登录的情况下是不可以点修改密码的2005-10-26 jacky*BUG:修改导航功能,让其能正常显示与隐藏,边界大小等,哈完美解决*NEW:导航显示时,让主界面也不出现灰色标题栏*WHY:系统参数设置FORM上没有光标出现,这种现象在其他FORM上好象偶尔也会出现==好象是解决了*NEW:在FrmMain中增加处理子窗口打开的消息,完全解决只要有子FORM打开,则功能列消失的功能*NEW:在系统管理中设置系统更新路径后,就可以在程序起动期间或是手动点工具栏按钮更新程序2005-10-29 jacky*NEW:如果进入GRID后,有写代码,按右键弹出,是不是会好一些呢?*NEW:在界面上按回车跳转的功能,遇到TDBMEMO等就不应该再跳了*NEW:在SELECT_FORM中,搜索栏位选择中,不再出现隐藏的字段了*NEW:SELECT_FORM中的MEMO字段要显示出文字*TODO:如果有把DataSet中的字段拉出来,变成文本框的录入,可以在其OnEnter和OnExit事件中选择PubEnter和PubExit事件,以达到进入编辑时,改变颜色,以醒目*NEW:如果是模版建立的窗口,则自动建立OnEnter和OnExit事件,以改变控件颜色*NEW:KU.GetParam函数有了重载的版本,即是可以有预设值的,而且也不会因为没有这个参数而出错*OK:先迪的材料进销存部分,已经完成库存数量之间的触发关系,所有单据在审核后数量才会改变2005-10-30 jacky

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧