最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

分部方法:应该纳入到 C#中吗?

  • 2007-09-09
  • 本文字数:1212 字

    阅读完需:约 4 分钟

C#新增的特性中引起争议的有许多,分部方法(Partial Method)算是一个。分部方法通常被定义在一个分部类中,在常规的类文件中也可实现。如果分部方法没有被实现,编译器就不会、对他们进行编译。

分部方法有着严格的限制。它们必须是私有的,不能返回值,不能有输出参数。因为任何针对没有被实现的分部方法的调用都会简单地被忽略,所以说这些限制是非常有必要的。反过又意味着,分部方法不能作为一个明确分配的变量。Visual Basic 也有分部方法,尽管 VB 不需要对变量的明确分配,它也有同样的限制。

有那么多的限制,有人可能会问,“它们有什么优点?”。这个问题问得好,基本上,分部方法仅被代码生成器在处理轻量级事件的时候使用。就像 Alexander Jung 所解释的 :

分部方法通常(也可能是唯一相关的)的应用场景就是在代码生成的时候用于处理轻量级事件。假设你解析一个数据库或者一个 XML 文件,然后生成了数据类,结果你会发现有数十个类、几百个属性以及一大堆泛型和模板文件等。分部方法另外一个经常被用到的地方是验证,或者让属性的 setter 去更新另一个属性。所以如果你要使用产生的代码,或者在运行时有几百个事件和数千个方法调用的话( 其实大多数情况下只用到了其中的一点点),就让分部方法来吧。分部方法在声明和使用时要比事件容易得多,如果没有用到它们,它们就会消失。

性能的提升并不是没有代价的。从分部方法必须是私有的限制中,Alexander 发现了它们的不足之处:

缺点:如果你喜欢元数据驱动的应用,并且已经被 ASP.NET 的数据绑定所困扰时(因为没有其他的方法可以附上元数据)……那么,就准备着在将来丢失信息吧。如果你需要为属性的 setter 增加一些事件(基于跟踪和调试的需要),如果你需要某个动态的行为(比如附上某个通用规则引擎)等等,那么就让我们祈祷代码分析器的开发人员能够预知这个场景(或者已经做好了准备)吧。你有了一个清晰的层的分离,那么实体就应该对 UI 一无所知吗?是的,将代码直接放到数据类中会破坏层的关系,但是你可以手动地用分部方法实现真正的事件啊。

另外一些人对于 C#中的分部方法也是忧虑重重,大部分是关于代码设计器的使用的。Stefan Wenig 写道:

首先,我不是非常热衷于设计器。我忧虑的是设计器也许很快就会将我们送上过去基于 COM 开发时的老路,数百个设计器和向导产生了那么多没人想去看的 ATL 和 MCF 代码。在我们陷于设计器、创建的无用文件和复杂的构建过程时,使用 Ruby 的家伙们在笑,因为他们用几行代码就可以解决(联想一下上世纪 90 年代 COM/C++ 和 Java 的比较)。难道对于基于代码的开发人员生产率不是 C#所首要考虑的(看看 VB 的设计器驱动的 RAD 路线图)?我们不应该再沉浸于基于设计器的,企业类库思想的,乐于使用软件工厂代码设计器的幻想中了。团结起来,抵制它们!

Ayende Rahien 也没有嘴软:

让我们一起埋葬这些代码设计器吧,竖起分部方法的辉煌墓碑!

查看英文原文: Partial Methods: Do They Belong in C#?

2007-09-09 21:40768

评论

发布
暂无评论
发现更多内容

置顶两个月!《程序员如何向架构师转型》神作在Github持续霸榜

做梦都在改BUG

Java 程序员 系统设计 架构师

手慢无!阿里云神作《Spring Boot进阶原理实战》真的太全了!

做梦都在改BUG

Java 微服务 Spring Boot 框架

Bytebase vs Flyway

Bytebase

数据库 版本控制 变更

微服务架构下你不得不知的3种部署策略

做梦都在改BUG

Java 架构 微服务

小程序营销模版——企业和开发者的应用形态

没有用户名丶

小程序容器

2023年金三银四最新版Java面试八股文教程,涵盖25大专题:Java基础+spring全家桶+大数据+网络+设计模式+算法

采菊东篱下

Java 程序员 面试

行业分析| anyRTC智慧视频监控的应用

anyRTC开发者

人工智能 音视频 智慧城市 智慧交通 视频监控

用注解的方式优雅实现Ression分布式锁

做梦都在改BUG

Java 分布式锁 Ression

WorkPlus IM即时通讯平台,管理者不会拒绝的高效通讯办公工具

WorkPlus

KubeVela 1.7 版本解读:接管你的已有工作负载

阿里巴巴云原生

阿里云 开源 云原生 KubeVela

CVPR 2023 大模型研讨会召开在即,国际技术竞赛正式开赛

飞桨PaddlePaddle

2023字节、腾讯、阿里等6家大厂Java开发面试真题+高频面试题总结

小小怪下士

Java java程序员 java面试 Java面试题

阿里巴巴为什么不建议直接使用@Async注解?

Java你猿哥

Java ssm java8 Async Java工程师

百度大健康行业如何打造医美IP爆点?这波“悦己”营销有颜又有料!

Geek_2d6073

GitHub上架即下架!《分布式系统人人都是架构师》全彩笔记开源

做梦都在改BUG

Java 分布式 系统架构 架构师

MobTech MobPush|智能标签推送

MobTech袤博科技

机器学习算法(九): 基于线性判别模型的LDA手写数字分类识别

汀丶人工智能

人工智能 数据挖掘 机器学习 LDA算法

从 1000+ 参赛项目突围,涛思数据荣获 ITEC 2022 全球创业赛成长组二等奖

TDengine

tdengine 物联网 时序数据库 数字经济 大数据 开源

MobTech MobPush|厂商通道支持

MobTech袤博科技

Nautilus Chain 首个生态基础设施 Poseiswap,公布空投规则

西柚子

低代码平台搭建CRM 加速重构业务模式

力软低代码开发平台

运动健康路线导入,助力用户轻松导航

HMS Core

HMS Core

凭借左程云(左神)的这份 “程序员代码面试指南”我入职了字节

Java你猿哥

Java 算法 数组 二叉树 面经

接通率维持66%以上,为什么火山引擎VeDI能让企业智能外呼不再难?

字节跳动数据平台

营销 用户增长 业务增长 客户数据 企业号 3 月 PK 榜

前端和低代码两者藕断丝连的关系

这我可不懂

前端 低代码 JNPF

一文详解扩散模型:DDPM

京东科技开发者

人工智能 AIGC 企业号 3 月 PK 榜 DDPM

阿里架构调整完毕,成立云智能集团全面独立经营,张勇兼任CEO

B Impact

一文带你搞懂如何优化慢SQL

京东科技开发者

数据库 sql 优化 企业号 3 月 PK 榜

LED透明屏私人定制势不可挡

Dylan

电子 LED显示屏 屏幕

AI + Kubernetes 赋能DevSecOps 的思考

HummerCloud

人工智能 Kubernetes DevOps

2023 微信公开课黄铁鸣企业微信最新动态:1200w、5亿客户、GMV上千亿

B Impact

分部方法:应该纳入到C#中吗?_.NET_Jonathan Allen_InfoQ精选文章