C#中的 具名参数 和 可选参数
c# 参数
2023-09-11 14:22:03 时间
C#中的 具名参数 和 可选参数
具名参数 和 可选参数 是 C# framework 4.0 出来的新特性。
一. 常规方法定义及调用
public void Demo1(string x, int y){
//do something...
}
public void Main(){
//调用
Demo1("similar", 22);
}
调用时,参数顺序(类型)必须与声明一致,且不可省略。
二. 可选参数的声明及调用
可选参数分为两种情况: 1. 部分参数可选; 2. 全部参数都是可选
//部分可选(x为必选,y为可选)
public void Demo2(string x, int y = 5){
//do something...
}
public void Main(){
//调用
Demo2("similar"); // y不传入实参时,y使用默认值5
Demo2("similar", 10); // y传入实参,则使用实参10
}
注: 当参数为部分可选时, 可选参数 的声明必须定义在 不可选参数 的后面(如上: y 的声明在 x 之后),不然会出现如下错误提示:
//全部可选(x,y 均为可选参数)
public void Demo3(string x = "demo", int y = 5)
{
//do something...
}
public void Main()
{
//调用
Demo3(); // x,y不传入实参时,x,y使用默认值 "demo",5
Demo3("similar"); // y不传入实参时,y使用默认值5
Demo3("similar", 10); // x,y都传入实参
}
注: a. 当参数全部都为可选时,参数的声明顺序可以随意定义,不分先后。
b. 参数声明定义可以无顺序,但调用时必须与声明时的一致。
上面的调用只写的3种,其实还有一种,就是 x 使用默认值,y 传入实参,即 : Demo3(10);
但这样调用会报错,因为Demo3的第一个参数是 string 类型,错误消息如图:
但是现在我只想传入y, 不想传入 x ,该怎么办呢,那么就要用到 C#的 具名参数。
三. 具名参数
具名参数的使用主要是体现在函数调用的时候。
public void Main()
{
//调用
Demo3(); // x,y不传入实参时,x,y使用默认值 "demo",5
Demo3("similar"); // y不传入实参时,y使用默认值5
Demo3("similar", 10); // x,y都传入实参
// 具名参数的使用
Demo3(y:10);
}
通过具名参数,我们可以指定特定参数的值,这里我们通过 Demo3(y:10)就可以解决我们上面遇到的问题(x使用默认值,y使用实参)。
注: 当使用 具名参数时,调用方法可以不用管参数的声明顺序,即如下调用方式也是可以的:
在调用含有可选参数的方法时,vs中会有智能提示,提示哪些是可以选参数及其默认值,中括号表示可选[]:
分类: C#
相关文章
- (c#) 销毁资源和释放内存
- C# Expression 树转化为SQL与语句(二)--解决参数问题
- new Modifier (C# Reference)
- C#中保留2位小数
- 通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span。 给萌新的Flexbox简易入门教程 浅谈Quartz定时任务调度 浅谈JavaScript之Event(上篇) 探索JavaScript数组奥秘 【详解JavaScript系列】JavaScript之函数(一) C# Oracle.ManagedDataAccess 批量更新表数据 VS2015常用快捷键总结
- c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
- C#中泛型方法与泛型接口 C#泛型接口 List<IAll> arssr = new List<IAll>(); interface IPerson<T> c# List<接口>小技巧 泛型接口协变逆变的几个问题
- ASP.NET Boilerplate 学习 AspNet Core2 浏览器缓存使用 c#基础,单线程,跨线程访问和线程带参数 wpf 禁用启用webbroswer右键菜单 EF Core 2.0使用MsSql/MySql实现DB First和Code First ASP.NET Core部署到Windows IIS QRCode.js:使用 JavaScript 生成
- 装饰者模式的学习(c#) EF SaveChanges() 报错(转载) C# 四舍五入 保留两位小数(转载) DataGridView样式生成器使用说明 MSSQL如何将查询结果拼接成字符串 快递查询 C# 通过smtp直接发送邮件 C# 带参访问接口,WebClient方式 C# 发送手机短信 文件 日志 写入 与读取
- 浅谈c#的三个高级参数ref out 和Params C#中is与as的区别分析 “登陆”与“登录”有何区别 经典SQL语句大全(绝对的经典)
- C# 创建Word项目标号列表、多级编号列表
- C# 字符串拼接性能探索 c#中+、string.Concat、string.Format、StringBuilder.Append四种方式进行字符串拼接时的性能
- c#的参数调用
- C#,入门教程(34)——关于函数的参数之引用(ref)的一点知识与源程序
- c#中一个进程启动另一个进程并传递参数
- c#中绑定socket时提示10014系统检测到在一个调用中尝试使用指针参数时的无效指针地址。
- 总结了C#中string.format用法。分享给大家供大家参考。具体分析如下:
- 用c#绘制曲线图
- 在C#中调用一个dll函数,其中有个参数为 hdc,如何在C#中得到这个值并传给这个参数呢?
- 《敏捷软件开发:原则、模式与实践(C#版.修订版)》—第1章1.2节 原则
- C#代码实现对HTTP POST参数进行排序
- c# 序列化
- 用c#查询各快递物流信息
- 【转发】SqlServer数据库表生成C# Model实体类SQL语句
- C#BufferStream
- C# params可变参数
- C# 可变参数函数
- c#操作xml文件
- C#-中out参数、ref参数与值参数的用法及区别
- C#参数化(防止SQL注入)
- C#中的 具名参数 和 可选参数
- 【C#】BackgroundWorker类传递参数