前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >X#(XSharp)的重载

X#(XSharp)的重载

作者头像
firstxinjie
发布2025-01-07 12:33:55
发布2025-01-07 12:33:55
7200
代码可运行
举报
文章被收录于专栏:X#(XSharp)X#(XSharp)
运行总次数:0
代码可运行

重载是 OOP 编译时的多态性。但是,VFP 虽然号称是面向对象的编程语言,却缺乏这一特性。VFP 的 OOP 仅仅实现了封装和继承。

举例来说,当你在 VFP 中创建一个自定义类时,类方法是不能重名的。也就是说,如果你在自定义类 AB 中有一个方法名是 test,它接收一个参数 a,那么,你就不能在 AB 中增加另一个方法名是 test,接收两个参数 a 和 b 的方法。然后,你看到的就是 test、test1、test2......这样的自定义方法。

然后,在“不耽误挣钱”的商业思维基础之上,当你隔了N天/月/年后,需要再次调用它时,你不得不再次查询源码来搞清楚 test/test1/test2...之间的区别。

有人会说,自定义方法也可以有方法描述来明确它们之间的区别啊。是的,这是一个方法。但是,既然具有了“不耽误挣钱”的思维模式,那么,很大程度上,是不知道该如何在 VFP IDE 中实现的......况且,VFP IDE 中的属性窗口中的“说明”部分,可能被无意关闭或者空间不足以完整呈现方法说明.....那是因为你的方法说明的字符长度超出了它的“范围”。

X#终结了这一切。

首先,X#是一门 .NET 语言(强类型);其次,它兼容 VFP 语法。

但是,在 X# 中使用重载,对于大多数 foxer 来说,还是有一点点障碍的。

在 VFP 中,方法定义的语法有两种。

第一种:

代码语言:javascript
代码运行次数:0
运行
复制
PROCEDURE ProcedureName 
   [ LPARAMETERS parameter1 [ ,parameter2 ] ,... ]
      Commands 
   [ RETURN [ eExpression ] ]
[ENDPROC]

第二种:

代码语言:javascript
代码运行次数:0
运行
复制
PROCEDURE ProcedureName( [ parameter1 [ AS para1type ][ ,parameter2 
[AS para2type ] ] ,...] ) [ AS returntype ]
      Commands 
   [ RETURN [ eExpression ] ]
[ENDPROC]

第一种是绝大多数 foxer 所熟知的,尽管你可能看不明白这个语法定义。但是,我从此刻起,建议 foxer 在使用时,尽可能的使用第二种语法定义。

你注意到两种语法定义的区别了吗?

在 VFP9 的帮助文件中,有这样一节:在 WITH ... ENDWITH 命令和 FOR EACH ... ENDFOR 命令中支持智能感应

其中,有这样一句描述:当用户输入 AS 关键字时,智能感应会显示登记在 FoxCode.dbf 数据表的 Type 字段值为 "T" 之类型清单。如果指定的是一个合法的类型,则在一个 WITH ... ENDWITH 命令或 FOR EACH ... ENDFOR 命令内输入一个句点时会显示对象参考的智能感应。

好吧。在我有限的 VFP 认知中,我只能认为 AS 关键字是为了让 VFP 的代码更像强类型语言,例如 C#,的语法,其在 VFP 中实际存在的意义仅仅是为了更好的使用智能感应(实际上,可能有很多使用所谓汉化版VFP的,根本不知道“智能感应”是啥)。但是,从此刻起,请使用第二种语法。

当你习惯了第二种语法时,在使用 X# 时,才能一帆风顺的在其中实现“重载”。这并不是说,你在 VFP 中习惯第一种语法就不能在 X# 中实现重载,而是说,你会“自然而然”的认为,X# 对 VFP 的兼容度确实不错。

这其实在于 X# 中一个特定的概念:调用约定

简单的说,VFP中使用的是 CLIPPER 调用约定;而 X# 实现重载时使用的是 STRICT 约定。如果你不打算去查阅 X# 帮助来了解二者的差异,那么,就记住:在定义变量/函数返回值时使用 AS 关键字,实质就是使用了 STRICT 约定。无论你使用的是 VFP 还是 X#。

follow me,延续自己的技术生命!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 xinjie的VFP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档