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是不是通过语法糖实现的,总感觉语法这种语法糖仅是表面解决问题
...全文
553 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
MyGeneration 是一款不错的ORM和代码生成工具,它基于模板(Template)工作,安装好MyGeneration 后自带了很多模板,并且提供在线模板库提供模板升级和允许用户自定义模板。MyGeneration 的模板可以用C#, VB.NET, JScript, and VBScript编写。使用MyGeneration 可以为Gentle.NET, Opf3, NHibernate等生成ORM架构或ORM文件,为多种数据库生成存储过程,为.Net项目生成C#VB.NET 程序代码,PHP、HTML等页面代码。 MyGeneration 具有以下的特性: 1.支持多种数据库 Microsoft SQLServer Oracle IBM DB2 Microsoft Access MySQL PostgreSQL Firebird Interbase SQLite VistaDB Advantage IBM iSeries CSV & other delimited text files 2.支持重用和include文件 3.Ability to single step through all templates regardless of language. (单步调试?) 4.支持为模板输入自定义用户界面,包括winForm程序。 5.提供cmd命令行工具(ZuesCmd.Exe)和GUI(Project)工具. 6.提供强大的原数据 API(MyMeta)访问你的数据库里的原数据。 7.提供Unicode、语法高亮、查找、替换等功能的强大文本编辑器。 8.支持插件(Intrinsic Objects)扩展模板的功能。 9.支持MyMeta meta-data providers插件 10.Dockable windows.(不懂) 11.提供动态的可重写的数据类型映射。从数据库类型到MyGeneration的数据提供者类型到代码类型。 12.支持用户自定义原数据。 13.支持表、字段名、参数等重命名。 14.可以使用Gentle.NET, Opf3, NHibernate的模板。 15.支持在线帮助、模板升级和论坛。 二、myGeneration里的文件 目录: Architectures\ Contains dOOdads and any other MyGeneration sponsered frameworks/architectures. GeneratedCode\ 默认生成代码的存放位置。 Settings\ 配置文件存放目录。配置文件是各种.xml文件。 Templates\ 默认模板存放目录。 可执行文件: MyGeneration.exe 打开window界面 ZeusCmd.exe 打开命令行界面 uninstall.exe 各种帮助文件: ~\.chm 各种数据库驱动文件: ~\.dll 配置文件: DockManager.Config Settings\DefaultSettings.xml 存放默认设置。 Settings\DbTargets.xml 存放数据库到数据提供者数据类型的映射配置 Settings\Languages.xml 存放数据提供者到目标语言的数据类型映射配置 Settings\ScintillaNET.xml 存放语法高亮显示的对应关系的设置信息。 Settings\ZeusConfig.xml 三、缺点 只支持单表,复杂的查询还要先写视图

17,741

社区成员

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

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