C#新功能--命名参数与可选参数

  可能是篇幅太短了,又被打入冷宫了.先重发一篇加上可选参数.本来不想加这个呢,因为可选参数可能大家用的会多点.其实这

两个在VB中早就有了,C#中,在.net4发布之前是不能使用的.看到这个比较兴奋,我想大家也有好多人不知道,所以就强烈的想与大家

分享一下.

一、命名参数

   命名参数会潜在的改变编写代码的方式.这个新功能能使代码更容易阅读和理解.

例如,看一下System.IO名称空间中的File.Copy()方法,它一般构建为

File.Copy(@"C:\mytestFile.txt",@"C:\myOtherFile.txt",true);

      在这行代码中,这个简单的方法使用3个参数,但实际传递给Copy()方法的是什么内容?除非

知道这个方法的前前后后,否则 仅看一眼该方法,很难判断出该方法会执行何种操作.而通过命名

参数,就可以在提供参数值之前使用代码中的参数名,如下所示:

File.Copy(sourceFileName: @"C:\mytestFile.txt",
                destFileName:  @"C:\myOtherFile.txt",
                overwrite:true);

    现在通过命名参数,就很容易阅读和理解这行代码将执行的操作.使用命名参数对最终的编译

没有影响,命名参数仅用在应用程序的编码中.

二、可选参数

可选参数允许为方法的一些参数提供默认值,并允许使用者重载类型,因此,即使只有一个方法,也能处理所有变体

public void test(string a, string b, int c, bool d=true,bool e=false)
        {
        }

  调用:

public void invoke()
        {
            test("li", "dd",7);
            test("li", "dd", 7,false);
            test("li", "dd", 7, true,false);
        }

 这里也可以用到上述的命名参数:

   test("li", "dd", 7, e:true);

  这样d参数依然可以使用默认值,如果没有命名参数,想给e赋值,必须还要给d赋值.在使用可选参数的过程中,由于命名参数的出现,更提供了许多方便.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏从零开始学 Web 前端

嵌入式面试题(一)

4. 空指针(null pointer)指向了内存的什么地方(空指针的内部实现)?

702
来自专栏技术小站

p=p+1与p++的区别

781
来自专栏Coco的专栏

BAT及各大互联网公司2014前端笔试面试题--JavaScript篇

2395
来自专栏行者常至

Hibernate中 对象 的三种状态

1004
来自专栏CDA数据分析师

Python中eval带来的潜在风险,你知道吗?

00 前言 eval是Python用于执行python表达式的一个内置函数,使用eval,可以很方便的将字符串动态执行。比如下列代码: >>> eval("1+...

3728
来自专栏swag code

编程:判断一个数是否是奇数?(93.7%的人会写错)

看似是对的,但是每执行四次(四分之一错误)便会有一个错误的结果(用数据说话)。考虑到负奇数的情况,它除以2的结果就不会是1。因此,返回值是false,而这样是不...

684
来自专栏编程

西门子808D系统如何调用子程序

西门子808D有两种操作编程模式,一种是西门子模式,一种是ISO模式(即广数,法拉克编程模式) 如何在西门子模式下调用子程序呢? 西门子模式下,建立如下的两个程...

1798
来自专栏Golang语言社区

Node.js新手必须知道的4个JavaScript概念

如果只需要知道一种编程语言就可以构建一个全栈的应用程序,是不是特别了不起?Ryan Dahl为了把这个想法成为现实,创造了node.js。Node.js是建立在...

2694
来自专栏程序员互动联盟

【编程基础】你是否真的了解main()函数?

最近看到很多人、甚至市面上的一些书籍,都使用了void main() ,其实这是错误的。C/C++中从来没有定义过void main() 。C++之父 Bjar...

3196
来自专栏技术小站

SpringMVC:数据绑定入门(二)

1.为了实现所输入的数据格式与所需要的匹配该如何做到?例如:http://localhost:8080/date1.do?date1=2018-01-01,其中...

722

扫码关注云+社区