当前位置:   CAD > 正文

是否重载在C#中拥有默认函数参数的唯一方法?

c#,overloading,php,程序员,xml,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员工具,站长工具

处理默认函数参数的唯一方法是通过函数重载吗?

例如,在PHP中我可以这样做:

function foo($x, $y=0)
{
}

在C#中处理它的最佳方法是这样吗?

void foo(int x)
{
  foo(x, 0);
}

void foo(int x, int y)
{
}

示例从此处解除

编辑

将C#示例变成了实际的C#(感谢Blair Conrad)



1> Giovanni Gal..:

只是为了满足一些好奇心:

从什么不C#支持默认参数?:

在C++等语言中,默认值可以作为方法声明的一部分包含在内:

void Process(员工员工,bool bonus = false)

可以使用以下方法调用此方法:

a.Process(员工,真实);

要么

a.Process(雇员);

在第二种情况下,参数奖励设置为false.

C#没有此功能.

我们没有此功能的一个原因与功能的特定实现有关.在C++世界中,当用户写道:

a.Process(雇员);

编译器生成

a.process(employee,false);

换句话说,编译器采用方法原型中指定的默认值并将其放入方法调用中 - 就像用户将'false'写为第二个参数一样.没有强制类的用户重新编译就无法更改默认值,这是不幸的.

在这方面,重载模型效果更好.框架作者只定义了两个单独的方法,单参数方法调用了双参数方法.这将保留框架中的默认值,必要时可以在其中进行修改.

编译器可以采用类似C++定义的东西并产生重载,但是这种方法存在一些问题.

第一个是用户编写的代码与编译器生成的代码之间的关联不太明显.我们通常尽可能地限制魔法,因为它使程序员更难.第二个问题与XML文档注释和智能感知等问题有关.编译器必须对如何为重载方法生成doc注释有特殊规则,而intellisense需要智能将重载方法折叠到单个方法中.

自己编写超载有点不方便,但我们认为这是一个可以接受的解决方案.



2> Blair Conrad..:

是的,这是最好的,除非你$在参数名称上省略了s,正如其他人所指出的那样.对于那些对缺乏默认参数值背后的基本原理感兴趣的人,请参阅@Giovanni Galbo的解释.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/CAD/detail/23471
推荐阅读
  • 如何解决《NetworkStream.Write立即返回-如何判断它何时完成数据发送?》经验,为你挑选了2个好方法。c#,network-programming,服务器,程序员,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,... [详细]

  • 如何解决《+=C++中的运算符》经验,为你挑选了5个好方法。c++,operators,程序员,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开... [详细]

  • 如何解决《名为i的变量是不可接受的吗?》经验,为你挑选了4个好方法。variables,iterator,coding-style,naming-conventions,程序员,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,... [详细]

  • 如何解决《在图表中查找访问某些节点的最短路径》经验,为你挑选了5个好方法。algorithm,graph-theory,算法,程序员,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix... [详细]

  • 如何解决《OSX上的游戏手柄代码:嗯?》经验,为你挑选了0个好方法。macos,iokit,程序员,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具... [详细]

  • 如何解决《关于循环终止时计数器变量的混淆》经验,为你挑选了1个好方法。java,for-loop,程序员,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开... [详细]

  • 如何解决《有没有一个有效的工具将C#代码转换为Java代码?》经验,为你挑选了5个好方法。c#,java,code-translation,程序员,rust,xml,android,iphone,DevBox,在线流程图,编程,编程问答,程... [详细]

  • 如何解决《你什么时候使用"this"关键字?》经验,为你挑选了11个好方法。c#,coding-style,this,程序员,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生... [详细]

  • 如何解决《为什么要使用指针?》经验,为你挑选了12个好方法。c,c++,pointers,程序员,算法,go,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前... [详细]

  • 如何解决《例外或错误代码的约定》经验,为你挑选了9个好方法。language-agnostic,language-design,程序员,https,go,perl,sql,c#,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,... [详细]

  • 如何解决《何时(如果有的话)废弃生产代码并重新开始?》经验,为你挑选了10个好方法。refactoring,程序员,安全,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线... [详细]

  • 如何解决《你使用设计模式吗?》经验,为你挑选了2个好方法。language-agnostic,design-patterns,算法,程序员,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,u... [详细]

  • 如何解决《局部变量初始化是否必须?》经验,为你挑选了3个好方法。c,c++,optimization,performance,安全,程序员,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,u... [详细]

  • 如何解决《命名块来限制变量范围:好主意?》经验,为你挑选了5个好方法。java,coding-style,eclipse,程序员,go,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,uni... [详细]

  • 如何解决《重写遗留代码》经验,为你挑选了5个好方法。legacy,refactoring,maintenance,cobol,程序员,c#,vb,安全,windows,sql,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开... [详细]

  • 如何解决《有没有人有CSLA的实际经验?》经验,为你挑选了11个好方法。.net,csla,frameworks,程序员,windows,sql,go,服务器,ajax,注入,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开... [详细]

  • 如何解决《import语句应该始终位于模块的顶部吗?》经验,为你挑选了10个好方法。python,optimization,coding-style,pycharm,eclipse,emacs,vim,程序员,windows,DevBox,... [详细]

  • 如何解决《从C#切换到C++.任何必读书?》经验,为你挑选了4个好方法。c#,c++,程序员,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发... [详细]

  • 如何解决《哪些C/C++工具可以检查缓冲区溢出?》经验,为你挑选了3个好方法。c,c++,buffer-overflow,buffer-overrun,linux,安全,程序员,容器,DevBox,在线流程图,编程,编程问答,程序员,开发者... [详细]

  • 如何解决《开发ArcMap扩展.Net书籍?》经验,为你挑选了1个好方法。.net,arcobjects,esri,arcmap,程序员,vb,c#,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维... [详细]

相关标签
  

闽ICP备14008679号