C#中的具名参数、可选参数及注意问题

嘎子 C# 2016-03-21 975 次浏览 没有评论

具名参数 和 可选参数 是 C# framework 4.0 出来的新特性。

一. 常规方法定义及调用

调用时,参数顺序(类型)必须与声明一致,且不可省略。

二. 可选参数的声明及调用

可选参数分为两种情况: 1. 部分参数可选;?? 2. 全部参数都是可选

注: 当参数为部分可选时, 可选参数? 的声明必须定义在 不可选参数 的后面(如上: y 的声明在 x 之后),不然会出现如下错误提示:

注: a.? 当参数全部都为可选时,参数的声明顺序可以随意定义,不分先后。

b. 参数声明定义可以无顺序,但调用时必须与声明时的一致。

上面的调用只写的3种,其实还有一种,就是 x 使用默认值,y 传入实参,即 :? Demo3(10);

但这样调用会报错,因为Demo3的第一个参数是 string 类型,错误消息如图:

但是现在我只想传入y, 不想传入 x ,该怎么办呢,那么就要用到 C#的 具名参数。

三. 具名参数

具名参数的使用主要是体现在函数调用的时候。

通过具名参数,我们可以指定特定参数的值,这里我们通过 Demo3(y:10)就可以解决我们上面遇到的问题(x使用默认值,y使用实参)。

注: 当使用 具名参数时,调用方法可以不用管参数的声明顺序,即如下调用方式也是可以的:

在调用含有可选参数的方法时,vs中会有智能提示,提示哪些是可以选参数及其默认值,中括号表示可选[]:

四、存在问题

可选参数和具名参数看上去都很美好。个人特别喜欢的是可选参数,给我们提供了一种更为简洁的写重载函数的方法。美丽而高效。

但具名参数存在一个很大的问题。具名参数的参数名会成为接口的一部分,所以在对函数进行升级的时候就无法升级参数名。如果有新的版本中更新了参数名,使用以往版本所写的代码就会失效。

客户端代码使用具名参数意味着:方法中的参数名称也成为了公有接口的一部分。假如修改公有参数的名称将有可能破坏调用者的代码。这意味着:调用者应该尽可能的避免使用具名参数,而作为API的设计者,也应该避免修改公有货受保护方法中参数的名称。

原创文章,文章首发于:Riley Ge (@rileyge) — Steemit

原创文章,转载请注明: 转载自TsonTec:测量解决方案提供者

本文链接地址: C#中的具名参数、可选参数及注意问题

相关主题

  • 用.NET执行AutoCAD自带命令2016-02-20 用.NET执行AutoCAD自带命令 (2)
    看到网上很多文章说什么以前用其他语言时执行AutoCAD中自带的命令非常方便,而.Net使用时非常不方便。这样说也不算错,因为在AutoCAD […]
  • 返回null还是抛出Exception2016-03-22 返回null还是抛出Exception (2)
    我自己在写代码的时候也经常会写return null,但仔细想想这真的好吗? public User GetUser(string […]
  • Kotlin中如何实现类似Java或C#中的静态方法2017-05-28 Kotlin中如何实现类似Java或C#中的静态方法 (0)
    大家可以在网络上搜到不少这样的文章,官方推荐是包级函数,也有人说用伴生对象(companion […]
  • C#重载操作符==和!=时注意问题2016-03-12 C#重载操作符==和!=时注意问题 (0)
    1、大家一定要明确一点就是如果两个类在没有重载==和!=时用这两个运算符进行比较,那么只有引用相同的地方的时候才返回true,否则(不管里面的内容是否相等)返 […]
  • 用C#删除程序占用文件2016-01-29 用C#删除程序占用文件 (4)
    在写卸载程序时经常会遇到要删除文件自身的问题,此时文件被占用,使用常规方法并不容易删除。 删除文件方法如下: 文件 […]
  • 用C#编写一个自己删除自身文件及文件夹的卸载程序2016-01-31 用C#编写一个自己删除自身文件及文件夹的卸载程序 (9)
    本来自己很高兴的写了一篇文章:用C#删除程序占用文件。本来以为是这一个很好的解决方案。事实再一次证明,没有实践,就没有发言权。自己在实际使用的时候发现根本不是 […]

说点什么

您将是第一位评论人!

提醒
avatar
回顶部