设计方法的参数是,可以将部分参数和全部参数分配默认值,然后调用这些方法的时候可以选择不提供部分实参,使用参数定义的默认值,另外,还可以在调用方法的时候通过指定参数名称来传递实参。

例如:

public static class Program{
private static int32 s=;
private static void Mothed(int32 x=,string s="A",Datetime dt=default(Datetime),Guid guid=new Guid()){
Console.WriteLine("x={0},s={1},dt={2},guid={3}",x,s,dt,guid);
}
public static void Main(){
Mothed();//等同于Mothed(9,"A",default(Datetime),new Guid())
Mothed(,"X");//等同于Mothed(8,"X",default(Datetime),new Guid())
Mothed(,guid:Guid.NewGuid(),dt:DateTime.Now);//等同于Mothed(5,"A",DateTime.Now,Guid.NewGuid())
Mothed(s_n++,s_n++.ToString());//等同于Mothed(0,"1",default(Datetime),new Guid());
Mothed(s:(s_n++).ToString(),x:s_n++);//等同于一下两行代码:string t1="2";int32 t2=3; Mothed(t2,t1,default(Datetime),new Guid())
}
}

向方法传递实参时,编译器从左到右的顺序对实参进行求值。在对Mothed的第四个调用中s_n的当前默认值是0,先递增然后等于1传递给s,然后继续递增到2(s_n++先使用后递增)。

定义实参的规则和原则:

一、可为方法、构造器方法和有参属性(C#索引器)的参数指定默认值。还可以为属于委托定义一部分的参数指定默认值。以后调用该委托类型的变量时可省略实参来使用默认值。

二、有默认值的参数必须放在没有默认值的所有参数之后(重中之重)。但也有例外:参数数组这种参数必须放在所有参数(包括默认值得这些)之后,而且数组本身不能有一个默认值。

三、默认值必须是编译时能确定的常量值。(即C#认定的基元类型--不懂基元类型下次解释)值类型的参数可以将默认值设为值类型的实例,并让他的所有字段都包含零,可以使用default关键字或者new关键字来表达这个意思。

四、不要重命名参数变量,否则任何调用者以以传参数名的方式传递实参,他们的代码必须修改。

五、如果方法在模块外部调用,更改参数的默认值具有潜在的危险性。

六、如果参数使用ref或者out关键字进行标识,就不能设置默认值。因为没有办法为这些参数传递有意义的参数值,类似指针。

注意:如果参数要求ref/out,为了能传参数名的方式传递实参,可以按照下面语法进行:

//方法声明
private static void M(ref Int32 x){...}
//方法调用
Int32 a=;
M(x:ref a);

同时:

实参可按照任意顺序传递,但命名实参必须且只能出现在实参列表尾部,如上述代码第三种调用方式。

可以按照名称将实参传递给没有默认值的参数。但所有必须的实参都必须传递(无论按照位置还是按照名称),编译器才能编译代码

C#不允许省略逗号之间的实参,比如M(1,,DateTime.New).因为这样会造成可读性的影响,程序员将被迫去读 逗号,对于没有默认值的参数,如果想省略它们的实参,以传参数名的方式传递实参即可。

C#之可选参数和命名参数的更多相关文章

  1. c# 方法参数(传值,传引用,ref,out,params,可选参数,命名参数)

       一.方法参数的类型----值类型和引用类型 当方法传递的参数是值类型时,变量的栈数据会完整地复制到目标参数中即实参和形参中的数据相同但存放在内存的不同位置.所以,在目标方法中对形参所做的更改不会 ...

  2. C# 方法的可选参数、命名参数

    原文 http://www.cnblogs.com/lonelyxmas/admin/EditPosts.aspx?opt=1 C#方法的可选参数是.net 4.0最新提出的新的功能,对应简单的重载可 ...

  3. 可选参数、命名参数、.NET的特殊类型、特性

    1.可选参数和命名参数    1.1可选参数        语法:            [修饰符] 返回类型 方法名(必选参数n,可选参数n)        注意:            1.必选参 ...

  4. C# 4.0 新特性dynamic、可选参数、命名参数等

    1.dynamic ExpandoObject熟悉js的朋友都知道js可以这么写 :   1 var t = new Object(); 2 t.Abc = ‘something’; 3 t.Valu ...

  5. C# 4.0 可选参数 和 命名参数

    可选参数 可选参数是 C# 4.0 提出来的,当我们调用方法,不给这个参数(可选参数)赋值时,它会使用我们定义的默认值. 需要注意的是: (1)可选参数必须位于所有必选参数的后面: (2)可选参数必须 ...

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

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

  7. c#方法重载,可选参数,命名参数。

    其实这里没什么可说哦,c++的语法大同小异.先看一段代码. class Program { public static void Test(int a) { Console.WriteLine(&qu ...

  8. c#中的可选参数和命名参数的使用

    C#4.0之后出现了一个可选参数这个特性. class Cal { static void Main(string[] args) { test1 t = new test1(); t.Add(, ) ...

  9. Out,ref,params修饰符,可选参数,命名参数

    out输出,在调用函数中声明,在被调用函数中赋值: ref在调用函数中赋值,后调用: params修饰符,static double CalculateAverage(params[] values) ...

随机推荐

  1. HDFS 分布式写入问题 AlreadyBeingCreatedException

    进行追加文件时出现AlreadyBeingCreatedException错误 堆栈信息大致如下: org.apache.hadoop.ipc.RemoteException(org.apache.h ...

  2. 初识Hibernate之关联映射(一)

    上篇文章我们对持久化对象进行的学习,了解了它的三种不同的状态并通过它完成对数据库的映射操作.但这都是基于单张表的操作,如果两张或者两张以上的表之间存在某种关联,我们又该如何利用持久化对象进行操作呢?本 ...

  3. python---os模块使用详解

    os模块调用操作系统接口的模块 相关方法或属性: getcwd() --- 获取当前的操作目录,等同于linux中的pwd命令. 调用:os.getcwd() chdir() --- 改变python ...

  4. “一切都是消息”--MSF(消息服务框架)之【请求-响应】模式

    在前一篇, “一切都是消息”--MSF(消息服务框架)入门简介, 我们介绍了MSF基于异步通信,支持请求-响应通信模式和发布-订阅通信模式,并且介绍了如何获取MSF.今天,我们来看看如何使用MSF来做 ...

  5. ESLint可共享配置发布,团队自定义ESLint规则新鲜出炉

    ESLint于2013年6月份推出,至今4个年头,最新版本v4.8.0.它是目前主流的用于Javascript和JSX代码规范检查的利器,很多大公司比如Airbnb和Google均有一套自己的Java ...

  6. postman - 基本操作

    设置环境 collections 导入 runner 导入 api 配置api 编写测试(请求和响应)脚本 api的保存和导出 setting file -- setting

  7. webpack2使用ch3-自动化生成.html和内部引入的js自动更改

    1 安装webpack插件 $ cnpm install html-webpack-plugin --save-dev 安装成功后 2 由于之前 dist/目录下,编译后的.html和.js会混在一起 ...

  8. 【转】python time模块详解

    python 的内嵌time模板翻译及说明  一.简介 time模块提供各种操作时间的函数  说明:一般有两种表示时间的方式:       第一种是时间戳的方式(相对于1970.1.1 00:00:0 ...

  9. Windows系统下八大具有高逼格的DOS命令之一【ping】

    ping命令: ping是用来检测网络是否通畅或者查询网络连接速度的一个基础命令.作为一名对计算机痴迷的爱好者来说,ping命令是需要第一个掌握的DOS命令.它所利用的原理是这样的:网络上的机器都有唯 ...

  10. JAVA基础总结2

    2.1 关键字 常用的关键字主要包括如下: 2.2 标识符 简单而言标识符它其实就是用于标识某些东西的符号. 2.3 注释的应用 注释说明 注释的作用: 注释的应用: 2.4 常量和变量 常量的定义与 ...