开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 640|回复: 14
打印 上一主题 下一主题
收起左侧

[讨论] Csharp的面向对象似乎易语言也能实现

[复制链接]
结帖率:100% (28/28)
跳转到指定楼层
发表于 5 天前 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式   福建省福州市
一直想转C#,拖延症+自己觉得没有找到什么好的教学视频一直拖拖拉拉,直到昨天在B站发现了丑萌气质狗这个UP的教程,目前来看还算可以,能看的下去。
看完他说的面向对象的浅解,也总算是马马虎虎初步认识了面向对象编程。

但如果只是这样的话,易语言也能复现,于是动手实践了一下,果不其然。
然后脑子里冒出了:那这样来说易语言也能够做到面向对象发开?那面向过程、面向对象到底是编程语言的特性,还是开发者的编程思维?
第一时间就想跟人讨论,奈何群里不是很活跃,于是习惯性的打开了精易。
发帖的过程中,又想到为什么不直接问AI呢。然后又把问题抛给TX元宝。
终于得到了答案,一番思索过后,还是决定把帖子发出来原因是:
因为如果每个人都仅仅只是通过自己思考+AI问答,好像有一种闭门造车的感觉(比喻可能有些不妥),但也是这个现象肯定是不好的,想想如果以后大家遇到了问题都仅仅只是去问AI,缺少了交流就有种细思极恐的感觉。。。

这两张图是我分别用C和易语言 把UP主的视频内容的代码实现





最后附上TX元宝的回答

[color=rgba(0, 0, 0, 0.6)][size=0.8125]已深度思考(用时4秒)


[size=0.8125]



[size=0.8125][color=rgba(0, 0, 0, 0.6)][size=0.9375]
[size=0.8125]嗯,用户上传了两张编程截图,分别是C#和易语言的代码实现,核心问题是质疑易语言是否具备面向对象能力。用户显然认真观看了B站视频并动手实践了,这种探索精神值得肯定。不过用户可能混淆了“能模拟对象”和“原生支持面向对象”的区别。
[size=0.8125]从技术角度看,C#截图展示了典型的OOP特性:hero类封装了属性和方法,Main方法中通过new实例化对象。而易语言截图虽然实现了相似功能,但本质是结构化编程:用子程序模拟方法,自定义数据类型充当结构体,全程没有类继承、多态等机制。用户可能被表面相似性迷惑了。
[size=0.8125]用户深层需求可能是想验证易语言的现代性,或是为选择开发工具找依据。需要明确告知:易语言的设计目标是快速开发Windows应用,而非支持现代OOP。就像用螺丝刀也能敲钉子,但和锤子的本质不同。
[size=0.8125]值得注意的细节是,易语言代码中“函数_输出角色信息”暴露了问题——这本质是过程式函数,而非对象方法。而C#的ShowRoleInfo()天然能访问对象属性,这才是封装。用户可能没意识到这种差异的技术含义。
[size=0.8125]回复时要避免贬低易语言,毕竟它在中文开发社区有独特价值。重点是指出范式差异:就像中文和英文都能表达“面向对象”这个概念,但英语的“object”有特定语法支持,而中文需要额外说明。




[color=rgba(0, 0, 0, 0.9)][size=0.9375]
[size=0.9375]从技术实现的角度来看,您的易语言代码确实通过结构化编程模拟了类似面向对象的效果(如封装数据和行为),但严格来说,​易语言本身并不具备完整的面向对象编程(OOP)能力。以下是关键分析:

1. 您的代码实现了什么?​
  • [size=0.9375]​C#(面向对象语言)​​:
    • 定义了 hero ​类​(Class),包含属性(Name/Hp等)和方法(ShowRoleInfo())。
    • 通过 new hero() ​实例化对象​(如 Role 和 NPC),每个对象独立存储数据并调用方法。
    • 符合OOP的封装特性(数据与行为绑定在类中)。
  • [size=0.9375]​易语言(过程式语言)​​:
    • 通过自定义数据类型​(“角色”结构体)封装属性(名称、血量等)。
    • 通过子程序​(如 函数_输出角色信息)模拟对象方法,但需手动传入结构体参数。
    • 本质是面向过程的编程:数据(结构体)和行为(子程序)分离,通过函数参数传递状态。


2. 易语言的局限性(缺少OOP核心特性)​
[size=0.9375]虽然您的代码实现了类似效果,但易语言原生不支持以下OOP特性​:
  • ​类与对象​:
    易语言没有类的概念,自定义数据类型仅是结构体(Struct),无法直接绑定方法。
  • ​封装性​:
    结构体字段无法设置访问权限(如 private/public),所有数据默认公开。
  • ​继承​:
    不支持类继承(如 class NPC : hero),无法复用和扩展已有类型的逻辑。
  • ​多态​:
    无法通过父类引用调用子类方法(如 hero.ShowInfo() 根据实际对象类型动态执行不同逻辑)。
  • ​构造函数​:
    缺少自动初始化对象的构造机制(C#的 new hero() 会触发构造函数)。

3. 为什么表面效果相似?​
  • ​结构化编程的灵活性​:
    通过结构体+子程序,可以模拟简单的对象行为(如封装数据、调用函数)。
    ​但这本质是“用面向过程的方式模仿对象”​,而非语言原生支持OOP。
  • ​问题复杂度低​:
    当前示例仅涉及基础数据操作,未涉及对象关系(如继承、接口),因此过程式与面向对象的差异不明显。

4. 易语言的实际定位
[size=0.9375]易语言是以中文为核心的过程式编程语言,设计初衷是降低中文用户的编程门槛。其优势在于:
  • 快速开发Windows桌面应用
  • 直观的中文语法和可视化设计
  • 内置常用组件(如窗口、按钮)
[size=0.9375]但它并未将OOP作为核心范式,高阶特性(如多态、设计模式)难以实现。

结论
[size=0.9375]✅ ​您的代码证明​:易语言可通过结构体和子程序模拟简单的对象行为,解决基础问题。
❌ ​但严格来说​:易语言不具备原生面向对象能力,缺少类、继承、多态等OOP核心机制。

点评

《回复时要避免贬低易语言》看到这里 有种莫名的好笑   福建省福州市  发表于 5 天前

签到天数: 2 天

13
发表于 3 天前 | 只看该作者   湖南省长沙市
66666666666666666666667777777777
回复 支持 反对

使用道具 举报

签到天数: 2 天

12
发表于 3 天前 | 只看该作者   浙江省金华市
本帖最后由 嫂子 于 2025-7-1 00:34 编辑

首先要理解什么是面向对象。易语言具有部分OOP特性。但是有缺陷不完善。这就是结论。
另外你的代码  只是模拟OOP

虽然他的代码也不能提现OOP的特点
回复 支持 反对

使用道具 举报

结帖率:75% (3/4)

签到天数: 3 天

11
发表于 4 天前 | 只看该作者   福建省福州市
恩赐 发表于 2025-6-30 04:12
太抽象了 虽然不是第一次听到这个词 但是其实一直没深入思考过

哪个词抽象?面向对象?
你那个文字版的游戏不就是面向过程的,一路顺序分支选择,然后一路走下来
你的人物数据类型,就是面向对象的。把主角的姓名  HM  MP。封装在一个类里
也就是我分享例程里的封装。

如果你要用继承,就建立一个人类的类,然后主角和NPC。都可以用这个人类的基类了   省的主角NPC都要定义一遍 姓名 HP  MP  
回复 支持 反对

使用道具 举报

结帖率:100% (49/49)

签到天数: 4 天

10
发表于 4 天前 | 只看该作者   江西省南昌市
c#写的是class.print()
易语言也要class.print()  而不是 class_print(m_class)
回复 支持 反对

使用道具 举报

结帖率:86% (12/14)

签到天数: 4 天

9
发表于 4 天前 | 只看该作者   天津市天津市
类的三大特性 封装 继承 多态  
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 3 天

8
发表于 4 天前 | 只看该作者   江苏省苏州市
面向对象,我的理解是抽离出 共同的动作,比如攻击动作,加血动作等, 对象可以是人类, 人类进行攻击,加血
或者 替换成动物,动物进行攻击。加血。
回复 支持 反对

使用道具 举报

结帖率:100% (28/28)
7
 楼主| 发表于 4 天前 | 只看该作者   福建省福州市
APPLEUFO 发表于 2025-6-30 00:53
但严格来说​:易语言不具备原生面向对象能力,缺少类、继承、多态等OOP核心机制。应该改成 你写的易语言 ...

太抽象了 虽然不是第一次听到这个词 但是其实一直没深入思考过
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)

签到天数: 3 天

6
发表于 4 天前 | 只看该作者   贵州省毕节市
易语言的面向对象 不如他们彻底 他们文本 数值什么的基础类型都有对应的方法 打一个点就出来了易语言慢 其实是慢在编译器没有优化代码
回复 支持 反对

使用道具 举报

结帖率:75% (3/4)

签到天数: 3 天

地下
发表于 4 天前 | 只看该作者   福建省福州市
但严格来说​:易语言不具备原生面向对象能力,缺少类、继承、多态等OOP核心机制。应该改成 你写的易语言代码 不具备原生面向对象能力,缺少类、继承、多态等OOP核心机制。

你前面C#代码也是面向过程的,一路拉下来。

如果逻辑是面向过程的,用有面向对象的语言,写的东西也是面向过程的

封装 继承  多台, 易语言也就前面两个能用  

https://125.confly.eu.org/forum.php?mod ... 13798537&extra=  我以前写的,封装用的还行



/~950c378grI~:/
链接:https://pan.quark.cn/s/839d6ae2f86f

/~2206378grZ~:/
链接:https://pan.quark.cn/s/88e1989d826c

搞出什么审核了  我去     白打字  
就好像你家的客厅时钟。面向对象的话,  你封装一个时钟类
对外公开的命令只有   时钟.开启
时钟.关闭
时钟.调整时间


QQ20250630-004714.png (63.26 KB, 下载次数: 1)

QQ20250630-004714.png
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)

签到天数: 3 天

地板
发表于 4 天前 | 只看该作者   江西省赣州市
我个人看法:易语言的对象是特定对象,可以实现其他编程相同效果,但是可能实现起来更复杂繁琐一些。
易语言底层的定义已经固化了框架,就像别人可以画画结合文本描述,你只能填表文本描述。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表