C#默认参数是用语法糖实现的?刚了解,滴汗,那vb呢。

hwyqy 2018-01-02 11:06:33
刚了解C#中的默认参数是编译器的语法糖,比如
方法 A(bool b=true)

调用 A(),实际上编译器会生成A(true)

以前不知道,所以犯过错误
犯过什么错误呢,就是我写了一个类库 XX.dll,其中有方法B
后来更新方法B,增加一个参数,当时想当然认为,可以不用重载,用默认参数么
修改B方法为,B(bool b=true),还保持兼容,OK

现在想起来,这种操作是错误的,导致调用类库XX.dll的代码,会全部报错,除非重新编译。

不知道VB.net是不是通过语法糖实现的,总感觉语法这种语法糖仅是表面解决问题
...全文
552 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
圣殿骑士18 2018-01-05
  • 打赏
  • 举报
回复
很少在实际使用中碰到这种问题,因为编译一下代价也很低。 除非你是做第三方类库,那可能要考虑这个问题,否则还是编译简单,底层类库不断增加新功能,不太可能做到一直支持旧的项目库。 保持一个良好清晰精简的底层类库,和省掉项目编译的麻烦,我选择前者,更重要。
把分全给哥 2018-01-04
  • 打赏
  • 举报
回复
这不是默认参数么,可以传参啊
  • 打赏
  • 举报
回复
“不知道VB.net是不是通过语法糖实现的”这个是想说vb的重载呢?还是想反过来借着默认参数的机制再次借助 vb 来指责c#没有把不一样的方法签名混淆起来乱用?我们应该先能够接受、学习、先理解,然后再考虑改进 c# 语法,这才是学好 c# 的方式。
  • 打赏
  • 举报
回复
“仅是表面解决问题”其实伤害不了什么,所以少说。编程靠理解,保持质量靠测试,而不是靠写代码论是非。编写代码的目的不是为了发布,编写代码的目的纯粹是为了通过测试,而测试的目的才是为了发布。编写代码其实最低级的事情之一。有的人总是以为编写代码的目的是为了发布,于是喜欢论是非。其实要以测试为准,而不是以理论为准。有了这个“以测试为准”的思路,就很少论是非,而是感谢c#新版本给了我们更多可能性。
hwyqy 2018-01-03
  • 打赏
  • 举报
回复
那这样的话,如果我调整自己的类库,很容易引起不兼容的情况 调整既有类库,还是得用重载来实现了
threenewbee 2018-01-03
  • 打赏
  • 举报
回复
vb.net应该不同,毕竟vb.net早就支持可选参数了 http://developer.51cto.com/art/200910/159231.htm

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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