C# 2010 引入了命名实参和可选实参。 利用“命名实参”,您将能够为特定形参指定实参,方法是将实参与该形参的名称关联,而不是与形参在形参列表中的位置关联。

利用“可选实参”,您将能够为某些形参省略实参。 这两种技术都可与方法、索引器、构造函数和委托一起使用。

在使用命名实参和可选实参时,将按实参出现在实参列表(而不是形参列表)中的顺序计算这些实参。

命名形参和可选形参一起使用时,您将能够只为可选形参列表中的少数形参提供实参。

命名实参

有了命名实参,您将不再需要记住或查找形参在所调用方法的形参列表中的顺序。 可以按形参名称指定每个实参的形参。

例如,可以采用标准方式调用计算身体质量指数 (BMI) 的函数,方法是依照该函数定义的顺序按位置发送体重和身高的实参。

CalculateBMI(123, 64);

如果不记得形参的顺序,但却知道其名称,您可以按任意顺序(先发送体重或先发送身高)发送实参。

CalculateBMI(weight: 123, height: 64);CalculateBMI(height: 64, weight: 123);

命名实参还可以标识每个实参所表示的含义,从而改进代码的可读性。

例如:

class NamedExample
{static void Main(string[] args){Console.WriteLine(CalculateBMI(123, 64));//命名实参Console.WriteLine(CalculateBMI(weight: 123, height: 64));Console.WriteLine(CalculateBMI(height: 64, weight: 123));//命名实参可以放在位置实参后面,但是位置实参不能放在命名实参后面//下面的语句将导致编译错误//Console.WriteLine(CalculateBMI(weight: 123, 64));Console.WriteLine(CalculateBMI(123, height: 64));}//此处weight、height 都是形参,实际调用的地方都是实参static int CalculateBMI(int weight, int height){return (weight * 703) / (height * height);}
}

可选实参

方法、构造函数、索引器或委托的定义可以指定其形参为必需还是可选。 任何调用都必须为所有必需的形参提供实参,但可以为可选的形参省略实参。

每个可选形参都具有默认值作为其定义的一部分。 如果没有为该形参发送实参,则使用默认值。 默认值必须为常量。  

可选形参在形参列表的末尾定义,位于任何必需的形参之后。 如果调用方为一系列可选形参中的任意一个形参提供了实参,则它必须为前面的所有可选形参提供实参。 实参列表中不支持使用逗号分隔的间隔。 例如:

class OptionalExample    {// 命名参数和可选参数public static void Search(string name, int age = 21, string city = "Pueblo"){Console.WriteLine("Name = {0} - Age = {1} - City = {2}", name, age, city);}static void Main(string[] args){// 通用调用方式Search("Sue", 22, "New York");// 省略city可选参数Search("Mark", 23);//命名实参Search("Lucy", city: "Cairo");// 命名参数的顺序和形参顺序不相同Search("Pedro", age: 45, city: "Saigon");//实参列表中不支持使用逗号分隔的间隔//此处将导致编译错误//Search("Pedro", ,"Saigon");}}

IntelliSense 使用括号指示可选形参,如下图所示

注意:还可以通过使用 .NET OptionalAttribute 类来声明可选形参。 OptionalAttribute 形参不需要默认值。

转载于:https://www.cnblogs.com/dreamzyl/archive/2011/04/07/2007889.html

命名实参和可选实参(C#)相关推荐

  1. C#方法的六种参数,值参数、引用参数、输出参数、参数数组、命名参数、可选参数...

    方法的参数有六种,分别是值参数.引用参数.输出参数.参数数组.命名参数.可选参数. 值参数 值参数是方法的默认类型,通过复制实参的值到形参的方式把数据传递到方法,方法被调用时,系统作两步操作: 在栈中 ...

  2. 精进不休 .NET 4.0 (4) - C# 4.0 新特性之命名参数和可选参数

    [索引页] [源码下载] 精进不休 .NET 4.0 (4) - C# 4.0 新特性之命名参数和可选参数, 动态绑定(dynamic), 泛型协变和逆变, CountdownEvent, Barri ...

  3. C#中命名参数和可选参数

    调用方法时,变量名不需要添加到调用中.比如有如下的方法用于移动矩形并在移动之后设置他的宽和高: public void MoveAndResize(int x,int y,int width,int ...

  4. 【笔记】python的传递实参:位置实参、关键字实参、默认值、等效的函数调用、避免实参错误

    文章目录 一.传递实参 1.位置实参 2.关键字实参 3.默认值 4.等效的函数调用 5.避免实参错误 一.传递实参 函数定义中可能包含多个形参,因此函数调用中也可能包含多个实参.向函数传递实参的方式 ...

  5. python形参和实参_python函数实参和形参

    形参: 在定义函数阶段定义的参数称之为形式参数,简称形参,相当于变量名 实参: 在调用函数阶段传入的值称之为实际参数,简称实参,相当于变量值 形参与实参的关系: 1.在调用阶段,实参(变量值)会绑定给 ...

  6. php中什么是形参和实参,形参和实参的概念

    什么叫形参和实参? (已经百度,感觉没说清楚,或者我没听懂). 举个例最好了. 回复内容: 什么叫形参和实参? (已经百度,感觉没说清楚,或者我没听懂). 举个例最好了. PHP不太了解,但我可以用C ...

  7. 《Effective C#》读书笔记——条目10:使用可选参数减少方法重载的数量C#语言习惯...

    C#4.0 引入了具名参数(MSDN翻译为"命名实参",个人认为具名参数更形象,可选参数亦是)和可选参数(可选实参).客户端代码使用具名参数意味着:方法中的参数名称也成为了公有接口 ...

  8. php图片动画源码,JavaScript_jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载),ImageDrawer.js是一款可以实现动 - phpStudy...

    jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载) ImageDrawer.js是一款可以实现动态绘制图片动画的jQuery插件.通过ImageDrawer.js插件,你可 ...

  9. C#可选参数、命名参数、参数数组

    学习了C#4.0的新特性:可选参数.命名参数.参数数组. 1.可选参数,是指给方法的特定参数指定默认值,在调用方法时可以省略掉这些参数. 但要注意: (1)可选参数不能为参数列表的第1个参数,必须位于 ...

最新文章

  1. windows 7 在使用无线路由或者插线出现×××感叹号排除方法
  2. ccf a类会议_ISCA#39;21截稿在即,阿里或成为国内在该会议上的最大赢家!
  3. zabbix监控mysql的哪些参数_Centos6.3下zabbix监控mysql数据库参数
  4. 关于net::ERR_CONNECTION_ABORTED和Firebug 达到了 Post 请求大小限制的问题
  5. 黑科技抢先尝 | Windows全新终端初体验(附代码Build全过程)
  6. Android API中被忽略的几个函数接口
  7. 一步步编写操作系统 56 门、调用门与RPL序 1
  8. python入门小游戏之跳一跳_从零基础开始,用python手把手教你玩跳一跳小游戏,直接打出高分...
  9. np.linalg 线性代数
  10. java什么是反射 代码说明_java编程中,常提到的反射代码指的是什么?
  11. mysql 正则表达式 regExp
  12. 毕设:基于Spring Boot的旅游攻略网的设计与实现
  13. RGB 透明度 对应代码
  14. springboot发送qq邮件详细步骤
  15. 还记得最初的九九乘法表吗?
  16. 360 html有毒,火萤视频桌面有毒吗 如何解决360安全卫士误报有毒的问题
  17. matlab中的spline,在MATLAB中与spline(x,y,xi)插值效果相同的命令是( )
  18. 杜比dss200服务器重装,杜比数字影院处理器 DSS200 (Dolby Screen Server DSS200)
  19. 关于Discuz论坛整合问题
  20. tinymce编辑器之placeholder插件的实现

热门文章

  1. mybatis.xml中sql编写规范
  2. 测试JdbcTemplate执行SQL语句和存储过程
  3. WPF-13:资源文件需要手动引用问题
  4. linux如何修改主机名
  5. 笔记本电池电量校正方法(转CSDN)
  6. SQLAlchemy 常用基本表
  7. lol什么服务器出无限活力,《LOL》无限火力模式什么时候出 无限火力模式上线时间一览...
  8. unity3d 2019中文版
  9. 【多线程】ThreadPoolExecutor类源码解析----续(二进制相关运算)
  10. 自动化测试(三)如何用python写一个函数,这个函数的功能是,传入一个数字,产生N条邮箱,产生的邮箱不能重复。...