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

原文 http://www.cnblogs.com/lonelyxmas/admin/EditPosts.aspx?opt=1

   C#方法的可选参数是.net 4.0最新提出的新的功能,对应简单的重载可以使用可选参数和命名参数混合的形式来定义方法;这样就可以很高效的提供代码的运行效率!

         设计一个方法的参数的时,可为部分或全部参数分配默认值。调用其方法时,可以重新指定分配了默认值的参数,也可以使用默认值

重新指定分配默认值的参数时,可以显式地为指定参数名称赋值,隐式指定的时候,是根据方法参数的顺序,靠c#编译器的推断。
       


1

2

3

4

5

6

7

8

9

10

void M(int x=9,string s="a",DateTime dt = default(DateTime))  

{...}  

    

Main()  

{  

M();//使用默认值  

M(8,"b")://隐式指定方法参数,没有指定的使用默认值  

M(6,"v",DateTime.Now);//同上  

M(6,dt:DateTime.Now);//显式的指定参数名称,为指定的参数传值  

}

使用的指导原则: 
1、可以为方法和有参属性指定默认值 
2、有默认值的参数,必须定义在没有默认值的参数之后 
3、默认参数必须是常量 
4、ref 和 out参数不能指定默认值 

 

时间: 2024-10-25 07:38:29

C# 方法的可选参数、命名参数的相关文章

[C#]Attribute特性(2)——方法的特性及特性参数

 上篇博文[C#]Attribute特性介绍了特性的定义,类的特性,字段的特性,这篇博文将介绍方法的特性及特性参数相关概念. 3.方法的特性        之所以将这部分单列出来进行讨论,是因为对方法的特性查询的反射代码不同于对类的特性查询的反射代码.在这个例子里,我们将使用一个特性用来定义一种可进行事务处理的方法.    1 public class TransactionableAttribute : Attribute 2 { 3 public TransactionableAttribu

《圣殿祭司的ASP.NET4.0专家技术手册》----2-5 命名参数与可选变量的运用

2-5 命名参数与可选变量的运用 圣殿祭司的ASP.NET4.0专家技术手册首先介绍传统C#方法定义参数与自变量赋值,进一步对比新的命名参数与选择性自变量的运用. 传统C#方法的参数与变量.若C#的方法有声明参数(Parameter),则在调用方法时,必须指定自变量(Argument),且自变量还必须按照顺序,且不能省略任何的自变量. 程序:Parameters.aspx 参数与自变量的区别 程序说明 参数与自变量的区别在于,方法本身定义的叫参数,从外部调用方法必须赋值相关的"值",这

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

虽然4.0有了新特性. Named And Optional Arguments - 命名参数和可选参数 public partialclass NamedAndOptionalArguments : System.Web.UI.Page     {         protectedvoid Page_Load(object sender, EventArgs e)         {             Write("hello");             Write(&qu

《JavaScript应用程序设计》一一2.10 参数命名

2.10 参数命名 函数被传入的参数数量称为元数 (arity),一般来说函数的元数应该尽可能的精简,但还是避免不了出现极多个元数的调用场景.多元数的问题在于每个参数都必须按照先后顺序被传入,即使个别参数是可选的.要记住这些顺序本身就是一个令人头疼的问题,而且给函数传入无用的参数,对功能本身而言也没有意义.在下面的示例中,createUser()是一个用于创建用户账户的函数,userProto是用户账户的默认配置,可以用createUser()中传入的参数将之覆盖. var userProto

C#新功能--命名参数

命名参数会潜在的改变编写代码的方式.这个新功能能使代码更容易阅读和理解. 例如,看一下System.IO名称空间中的File.Copy()方法,它一般构建为 File.Copy(@"C:\mytestFile.txt",@"C:\myOtherFile.txt",true);    在这行代码中,这个简单的方法使用3个参数,但实际传递给Copy()方法的是什么内容?除非 知道这个方法的前前后后,否则 仅看一眼该方法,很难判断出该方法会执行何种操作.而通过命名 参数,

顺序OleDbCommand命名参数,你了解不?

接触到一个老的项目,里面大量使用OleDbConnection进行数据库操作,在执行SQL块语句时,对它的 顺序参数.命名参数很不了解.据说不能使用命名参数,但我这里试验了一下,好像是可以的,只是对参 数的顺序还是有要求.看看你能知道下面的输出结果吗? 测试环境:OleDbConnection+Oracle10G using System; using System.Data; using System.Data.OleDb; using System.Data.OracleClient; us

net framework-ADO.NET中如何使用AddWithValue方法给用户自定义类型的参数赋值?

问题描述 ADO.NET中如何使用AddWithValue方法给用户自定义类型的参数赋值? 我在sql数据库中注册了程序集并创建了别名为Vector3的自定义的类型,在类库文件中类型名是SqlVector3.已经能够在表和存储结构中使用这个自定义类型. 但我在C#代码中使用AddWithValue方法给一个存储过程的Vector3类型的参数赋值时,却出现了"ArgumentException: The parameter data type of Assets.MyScripts.SqlVect

Swift 3 中的函数参数命名规范指北

本文讲的是Swift 3 中的函数参数命名规范指北, 昨天,我开始将这个 Jayme 迁移到 Swift 3.这是我第一次将一个项目从 Swift 2.2 迁移至 Swift 3.说实话这个过程十分的繁琐,由于 Swift 3 在老版本基础上发生了很多比较大的改变,我不得不承认眼前这样一个事实,除了花费较多的时间以外,没有其余的捷径可走.不过这样的经历也带来一点好处:我对 Swift 3 的理解变得更为深入,对我来讲,这可能是最好的消息了. 在迁移代码的过程中,我需要做出很多的选择.更为蛋疼的是

通信-BeginReceive方法没有重载3个参数代码如何修改

问题描述 BeginReceive方法没有重载3个参数代码如何修改 c#socket异步通信BeginReceive方法没有重载3个参数代码如何修改 public string SocketReceive() { string result = ""; try { MemoryStream stream = new MemoryStream(); Byte[] bytesReceived = new Byte[256]; int bytes = 0; do { bytes = clie