Beginning C# Objects翻译缘起

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

得知我将成为Beginning C# Objects: from Concepts to Code一书的中文版译者时,一位朋友以其亲身体验告诉我,译书是一件苦差,敢于译大部头的书,简直就是“无知者无畏”的冒傻气行为。

其实我何尝不知翻译的辛苦呢?在进入IT行业之前,我在外语界活动了整整十年(其中五年是越南语专业学生),其间做笔译、口译无数,基本属于接单能力较强的一类。翻译是破坏,也是创造。破坏一件事物并不简单,以另一面貌重建它更加费力。翻译,是戴着脚镣的舞步,是钢丝上负重的行走。每次翻译完一篇文字,总有从地底重生的感觉。然而翻译也是快乐的,这快乐来自于在两种语言间轻快转换的思维轨迹。所以我愿意翻译,愿意体验这种特殊的快乐。常常暗自盘算,读者会不会为某句推敲良久才定下来的妙语会心一笑呢?当这样想着时,自己已经微笑了。

有一些人,不一定精通外语,但每天做着翻译功夫。如果说计算世界是真实世界的某种映射,那么,编程就是把人类思维转换为计算思维的翻译。人们越是想把真实世界的模式搬到计算世界,后者就越远离真实世界。对于程序员,这戴着脚镣在钢丝上负重起舞的一群,经常面临壁立的学习曲线。我们不得不承认,内存中的字节,要比“纸类(Paper Class)”容易理解。“一张纸”和“一个纸类对象实体”是完全不一样的两种概念。当天才们试图用“对象”描述真实世界的万事万物,实则已经在计算世界独立发展的道路上渐行渐远。

在面向对象编程早已成为主流的今天,正确理解计算世界中的对象概念,是对程序员的基本“外语”要求。把真实世界的需求“翻译”为对象模型,再“翻译”为代码,则是程序员必须具备的能力。许多程序员实际上缺乏正确的计算世界对象观,遑论两次“翻译”的准确度和可靠度了。可恨的是,坊间流传的 “入门与精通”、“XX大全”之类图书,充斥着极端错误的谬论和所谓“指南”,书中常常看到“双击设计界面的按钮,在事件处理方法中输入上百行实现代码”的可怕做法。我怀疑这些书籍的作者是否有资格做合格的面向对象开发程序员,更为花钱买书的读者暗吸一口冷气——你们在吞食毒药。

年余以来,我打算写一本指导入门者树立正确对象观的读物。由于另一本书进度的压力,这个计划一直没有付诸实施。而当手头的撰写工作告一段落时,我却想先做做翻译,转换一下思维方式。恰好博文视点的周筠老师提及Beginning C# Objects: from Concepts to Code,一读之下,无法释怀,马上把翻译机会要下来了。小气点说,这么好的一本书,还真舍不得让别人译呢!该书的Java版本(Beginning Java Objects)口碑甚好,C#版本也在Amazon得到五星级的评价。对于在面向对象编程方面需要入门和提高的C#程序员(如前文所言,他们不在少数),它实在是大旱之后的甘霖。

这本书也将是我对“知识全媒体”理念的初步实践。负责CSDN网站的技术和内容工作,给了我很多实践和思考的机会。与刘韧合作的《网络媒体教程》是这些实践和思考的结晶,而Beginning C# Objects将是另一种全新的知识传播体验。这本书的整个翻译过程都将在网上呈现,实现译者、编者、读者即时互动。我还会制作一些多媒体(音、视频)素材,包括译者对作品的评论和翻译过程讲述、专家组逐章节的阅读指导、实作演示等等内容。我坚信未来知识传播一定是跨媒体和全媒体的,希望这本书能在实践上完善这个理念。

(完)

手写观察者模式:C#上位机状态通知的优雅解法 定义:定义对象间一种一对多的依赖关系,当一个对象状态改变时,所有依赖它的对象都会收到通知并自动更新。两个核心角色:角色别名职责Subject​主题 / 被观察者 / 发布者维护观察者列表,提供注册/注销,状态变化时通知Observer​观察者 / 订阅者定义接收通知的接口(Update 方法)注册(Attach)→ 变化 → 通知(Notify)。观察者模式的本质,是把"谁关心我变了"这个问题,从「编译期硬编码」变成「运行期动态注册」。简单场景用event(语言级、够用); 阅读详情

相关推荐

C# AutoCAD 二次开发中的事务(Transaction)深度剖析:从基础原理到高级应用

本文深度剖析C# AutoCAD二次开发中的事务机制,强调其在保障原子性、线程安全与资源管理中的核心作用。重点阐述“黄金法则”——必须使用using语句管理事务,避免忘记提交或未结束事务的常见错误。深入讲解打开模式、对象升级降级、嵌套事务及事务组的应用,揭示性能陷阱与高级控制策略。强调事务仅在主线程中有效,杜绝后台线程操作,确保插件稳定高效。

ultramand的博客,重生之我在cad上二次开发猛猛敲C#代码~ 49

UnityReference阅读笔记

UnityCsReference 是 Unity 引擎的 C# 源码仓库,涵盖公开 API、绑定层、编辑器工具及部分托管实现,但不包含核心 C++ 逻辑。其价值在于揭示 C# 与 C++ 的交互机制:通过 extern、FreeFunction 等绑定技术,实现参数封送与跨层调用。

lastXuanGod的博客 179

C#工业机器视觉Recipe配方系统设计:多型号、多相机、多工位参数如何统一管理

本文结合工业机器视觉实际项目,系统介绍C#视觉软件Recipe配方系统的设计方法,涵盖多型号参数管理、相机与视觉配置拆分、JSON存储、配方切换状态机、运行时快照、版本追溯、权限控制以及导入导出等工程化设计思路。

XiaoZhenHua98|工业机器视觉开发 53

基于C#开发的ScreenSaver屏保应用 - 开源研究系列文章 - 个人小作品

,然后在泡泡屏保里就说在其基础上集成其它的屏保文件,做成自己屏保小应用,让其它屏保能够得到应用,于是就找了一些屏保,放到了此屏保应用里用于选择,打造自己的屏保管理应用,于是就有了此文。将插件放在应用的PlugIns目录里,运行应用,在设置里选择屏保,等待运行。(就是将屏保文件集成到插件Dll文件里进行调用)这个例子只是抛砖引玉,请需要的读者自己复用代码。上次编写了图片屏保(1) 主应用监控倒计时;

lzhdim的专栏 271

Statements without Semicolons

一条物理行 = 多条语句,完全合法;对比:Python 靠缩进和换行区分语句,C# 完全靠分号,这就是 “free-form 语言” 的特征。同样地,有些情况 —— 例如 using 声明 —— 虽然带有分号作为后缀,但它并不是一条语句。例如,代码清单 1.3 在一行里包含两条语句,两者结合,分别在两行中显示 Up 和 Down。由于换行并不分隔语句,你可以把多条语句写在同一行,C# 编译器会把这行解释为包含多条指令。实际上,代码块本身也被视为语句(代码块同样由语句组成),而且它们不需要以分号结尾。

龙山大佛爷的博客 200

PDF浏览器(WPF C#

本PDF浏览器基于WPF C#与Vue3、TypeScript、PDF.js开发,支持多标签浏览、缩略图导航、文本高亮批注、页面旋转缩放及双击关联打开。新增15种语言切换、密码管理、历史记录功能,采用无文件落地设计提升安全性。支持明暗主题切换,单实例运行,操作简便。即将发布全功能免费版,持续优化中。

9.歌工作室 274

C# WinForm 中 TCP 客户端与服务端开发实战

本文通过一个完整的 WinForm 示例,演示了 C# 中 TCP 服务端与客户端的基本开发流程。服务端使用监听端口,通过接受连接。客户端使用TcpClient主动连接服务端。收发数据统一通过进行读写。后台线程负责接收数据,通过Invoke实现跨线程更新 UI。在此基础上,读者可以进一步扩展多客户端并发处理、消息分包协议、心跳保活、断线重连等功能,构建更健壮的网络应用。

lzcbaba的博客 178

Keywords

编译器把 class 当成关键字,不是变量名,编译报错。如果关键字使用位置不对,违背语法规则,编译器无法解析代码,就输出编译错误,程序无法生成。这些单词被称为关键字,它们提供具体语法,编译器依靠这套语法来解析程序员编写的表达式。如果删掉关键字,编译器就无法分辨代码结构,直接编译报错。关键字不是随便写在代码任意地方的,只能用在语法规定的位置。编译器依靠关键字识别代码结构,分辨哪里是类、哪里是判断语句。注意:issue 在这里不是名词 “问题”,是动词:输出、发出。,就能识别类、静态方法的代码结构。

龙山大佛爷的博客 33

基于 C# / .NET 8 + Windows Forms + SQLite 的桌面银行业务演示系统——华夏示范银行管理系统

华夏示范银行管理系统是一款基于C#/.NET8+WindowsForms+SQLite的桌面端业务演示系统,采用分层架构设计,支持超级管理员、管理员与客户三类角色。系统集成登录认证、顶部导航、客户/产品管理、持仓价值计算、操作日志双写(SQLite+文本)、空闲自动登出及数据导出功能。通过“内容控件+按钮栏”组合模式实现页面动态扩展,支持自定义页配置与灵活功能开关,具备高可维护性与可拓展性,适用于银行业务流程教学与原型验证。

weixin_66547608的博客 201

Lua 基础语法(七)xLua 完整热更新 Demo

本文详解xLua Hotfix热更新技术,涵盖[Hotfix]标签作用与性能风险、AB包打包配置、UnityWebRequest异步下载及进度条实现、自定义AddLoader加载器注册、Lua热修复C#方法流程,并通过完整Demo演示从点击生成Cube到热更为红色Sphere的全过程。重点解析同名资源踩坑、Hotfix注入失效、重载函数调用异常等高频问题,对比xLua与下一代Huatuo(HybridCLR)热更新方案,强调其能力边界与选型建议,助力开发者掌握热更新核心技能并落地实战。

2301_80252792的博客 395

Lua 基础语法(八) Unity Huatuo (HybridCLR)

HybridCLR是基于IL2CPP的Unity原生C#热更新框架,支持AOT编译,性能高、内存低,兼容泛型、反射等全语法,无需学习Lua。通过AssemblyDefine划分热更程序集,打包产出独立dll,运行时加载并反射调用。相比xLua需打标签、ILRuntime受限于iOS禁用JIT,HybridCLR可新增类与方法,支持完整热更新。需Unity 2019.4+,配置IL2CPP后端,热更dll需改后缀为.bytes并置于StreamingAssets,宿主加载后执行逻辑。

2301_80252792的博客 516

学习C#开源报表组件Seal Report(27:Seal Report Designer界面布局-23)

学习Seal Report Designer软件左侧面板的Views节点中Model Detail View控件的属性用途及示例:

gc_2299的博客 59

基于C#+SQL Server 2012 实现(WinForm)学生管理系统

进入选课系统后,可以看到在上面的菜单里有课程,这些课程都是可选择的课程,而下面则是已选课程的菜单表,菜单表里有课程编号,课程名,教师编号,教师名,学分,上课时间这六个属性,左边有四个按钮分别是课表,选课,退课和确认,其中课表点击之后会弹出新的窗体显示你提交之后的课程,而确认则是在你满足选课要求之后,会将已选课程里的课程数据全部传输到课表当中。3.显示可选择的课程列表(不包含已选择的课程),可以按规则选择 3-5 门课程,选择的课程自动从可选课程列表中移至已选课程列表。(3) 使用的数据适配器对象是什么?

神仙别闹的自留地 271

C#转Python第4.5篇:单元测试:pytest vs xUnit/NUnit

C#单元测试强调结构化与显式标记,如[Fact]、[Theory]和测试类规范,体现“契约式”哲学;Python pytest则崇尚简洁,测试即普通函数,仅需test_前缀,无需额外装饰。两者在参数化、断言、Mock、Fixture及覆盖率上各有优劣,但Python更灵活轻量。从C#转到Python,开发者需适应“无仪式感”的测试风格,拥抱函数式思维,释放代码简洁性。

hanzhixintianxia的博客 151

C# 实现 Excel 与 Markdown 双向转换教程(基于 Spire.XLS)

转换后表格格式错乱:确保源文件为标准 Markdown/Excel 表格格式,去除合并单元格、特殊嵌套格式。提示文件无法加载:检查文件路径是否正确、文件是否被占用、文件格式是否合规。内存占用过高:必须执行Dispose()释放资源,批量转换时建议单次实例化、单次释放。借助 Spire.XLS for .NET 库,仅需少量代码即可实现 Excel 与 Markdown 的高效双向转换,无需依赖 Microsoft Office 环境,跨平台、轻量高效。

asdzx67的博客 195

C#调用Sql Server存储过程,并且使用传入表结构

定义DataTable。

weixin_44686958的博客 41

C# 调用C的方法,U8* 类型

C 类型C# 类型说明U8 Databyte Data传值(不修改)U8 *Data单个字节,读/写U8 *Data单个字节,只输出U8 *Data字节数组,多字节U8 **Data二级指针,重新分配数组注意:ref,out在IL层面上是一样的。也就是说// 直接使用 byte[]以上三种调用方法都可以,具体使用哪一种,就看实际情况了,比如读取的数据长度只有一个字节,那就用ref或者out的,如果是两个字节及以上,就用byte[]读取;

qq_59062726的博客 111

Visual Studio 也能接入 AI 编程:用 Ace Data Cloud 快速配置 LMLocal

# Visual Studio 也能接入 AI 编程:用 Ace Data Cloud 快速配置 LMLocal 如果你平时主要在 **Visual Studio** 里写 C#、.NET、桌面端或企业级项目,那么现在不需要频繁切换工具,也可以把 AI 编程能力接入到自己的 IDE 工作流里。 Ace Data Cloud 提供了兼容 OpenAI 风格的 API 入口,可以让支持自定义 Ba

静觅 231

C# 封装 MySQL 自动写入与查询工具类(基于 MySqlConnector)

做数据采集类项目时,常见需求是:定时把采集到的数据写入 MySQL,之后还能按表、列、行查询回来。这篇文章介绍一个封装好的工具类,基于 MySqlConnector,覆盖建表、写入、事务、定时、导出、查询的完整流程。

S13461120713的博客 143
上一篇: Beginning C# Objects目录初译稿
下一篇: Beginning C# Objects第三章初译手记
CSharpObjects
博客等级 码龄22年 1粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值