C#4.0中新加了几种参数,今天来了解一下:
1.缺省参数:

C# 4.0现在对方法,构造器,以及索引器支持使用可缺省的参数
当参数的默认值作为声明的一部分被指定的时候,参数就是可缺省的。
static void ChangeValue( int x, int y=3) //int y 有一个默认的参数3,因此它是一个可缺省的参数
{
int temp = x;
x = y;
y = temp;
}

当调用它的时候,我们可以显示的传递给它两个参数:

int i = 2;
int j = 4;
ChangeValue(i,j);
或者我们可以省略掉传递第二个参数,在这样的情形下,其默认值3就会被传进去:

int i = 2;
ChangeValue(i);
缺省参数的使用有两个简单的限制,其一是:缺省参数的声明只能放在普通参数之后。
static void ChangeValue( int x, int y=3,int z) //这样的编译器会提示错误
{
int temp = x;
x = y;
y = temp;
Console.WriteLine("x = {0}, y = {1},z={2}", x,y,z);
}

但是,缺省参数后面可以跟数组参数(params参数),实际上无论在什么情况下,params参数都只能是最后一个声明的参数。
缺省参数的另一个限制是:指定的缺省值必须是一个常量。

static int c = 0;
static void ChangeValue( int x, int y=(c++)) //编译器会提示Y的默认值必须为编译时常量的错误
{
int temp = x;
x = y;
y = temp;
Console.WriteLine("x = {0}, y = {1}", x,y);
}

2.命名参数:

命名参数:调用方法时,可以不按位置传递参数,而是指定参数的命名来传值 。
static void ChangeValue( int x, int y)
{
int temp = x;
x = y;
y = temp;
Console.WriteLine("x = {0}, y = {1}", x,y);
}

static void Main(string[] args)
{
ChangeValue(y:4,x:6);
Console.Read();
}

结果为:
x=4,y=6

3.可选参数:

声明方法中的参数时,可以为其设置默认值,那么在调用该方法时,这种可选参数是可以忽略的
static void ChangeValue(int x, int y = 2, int z = 3)
{
int temp = x;
x = y;
y = temp;
Console.WriteLine("x = {0}, y = {1},z={2}", x, y, z);
}

static void Main(string[] args)
{
ChangeValue(1);

ChangeValue(1,4);

Console.Read();

}

结果为:x=2,y=1,z=3
x=4,y=1,z=3

这个方法有三个参数第一个是必选参数,第二个和第三个是可选参数,他们都有一个默认值。这种形式对固定参数的几个方法重载很有用。

那么如果我有一个和可选参数方法不同参数相同的方法签名的方法时,c#会怎么处理呢?
static void ChangeValue(int x,int y)
{
int temp = x;
x = y;
y = temp;
Console.WriteLine("我先执行了吗? x = {0}, y = {1}", x, y);
}
static void ChangeValue(int x=4, int y = 2, int z = 3)
{
int temp = x;
x = y;
y = temp;
Console.WriteLine("x = {0}, y = {1},z={2}", x, y, z);
}

static void Main(string[] args)
{
ChangeValue();
ChangeValue(1);
ChangeValue(1,2);
Console.Read();
}

结果:x=2,y=4,z=3

x=2,y=1,z=3

我先执行了吗?x=2,y=1

实验证明,当我重载了一个和原可选参数相同命名的方法时,若执行参数相同,会优先执行没有可选参数的方法。

C# 4.0 新特性之参数相关推荐

  1. JDK5.0新特性--可变参数

    2019独角兽企业重金招聘Python工程师标准>>> /*** 可变参数*/ public class VariableParamater {/*** 统计2个或多个数的和*/pu ...

  2. C#4.0新特性:可选参数,命名参数,Dynamic

    1.可选参数 可以为方法的参数设置一个默认值,如下: class Program { static void Main(string[] args) { Show(); Show("cary ...

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

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

  4. JDK5.0新特性系列---目录

    JDK5.0新特性系列---目录 JDK5.0新特性系列---1.自动装箱和拆箱 JDK5.0新特性系列---2.新的for循环 JDK5.0新特性系列---3.枚举类型 JDK5.0新特性系列--- ...

  5. Servlet 3.0 新特性概述

    Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若 ...

  6. C#6.0,C#7.0新特性

    C#6.0,C#7.0新特性 C#6.0新特性 Auto-Property enhancements(自动属性增强) Read-only auto-properties (真正的只读属性) Auto- ...

  7. 【收藏】C# 2.03.0新特性总结

    c#2.0新特性 范型 我们知道通用的数据结构可以采用object存储任何数据类型.使用object问题是: 显示的强制转带来的代码复杂性 换装箱拆箱的性能损失(为什么有性能损失?因为涉及动态内存分配 ...

  8. 返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 Web API

    返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 Web API 原文:返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 ...

  9. MySQL 8.0新特性--CTE Recurive(二)

    上一篇介绍了CTE的基本用法,参考MySQL 8.0新特性--CTE(一),本篇再来介绍一下CTE Recurive递归. 1.什么是CTE Recurive? A recursive common ...

最新文章

  1. 数据蒋堂 | 大数据计算语法的SQL化
  2. Linux 进程间通信
  3. 物联网正在给批发业带来新的商业模式
  4. 深度学习之线性回归模型
  5. 并行和并发有什么区别?
  6. Java NIO Channel
  7. CSS具有最高优先级 !important
  8. 2017.4.20 火星人 思考记录
  9. 2019死磕java面试题_死磕 java同步系列之开篇
  10. lp地址为什么位_为什么内存空间分配总是以64K为边界?
  11. SLAM_汇总 | 视觉/激光/多传感器融合SLAM重点知识点
  12. 移动应用开发之相关需求文档详细说明
  13. Qt 字符编码转换(UTF-8 转换为 GBK)
  14. pip 卸载包失败的文件夹处理
  15. 适合小型团队的在线文档管理系统【minDoc】
  16. 浅谈逻辑漏洞:越权漏洞、密码找回漏洞、支付逻辑漏洞、指定账户恶意攻击、登录体系安全、业务一致性安全、业务数据篡改、验证码突破、数据重放安全
  17. 科学计算机计算等比求和公式,等比数列求和公式
  18. Linux命令之ss命令
  19. mysql临时表删除_MySQL如何创建和删除临时表
  20. android 指纹存储密码,安卓指纹认证(Android Fingerprint Auth)

热门文章

  1. Vagrant+VirtualBox版本的坑
  2. Linux 下禅道和 SVN、GIT 集成插件发布
  3. IP地址,子网掩码,默认网关,路由,形象生动阐述
  4. 4.6 Routing -- Rendering A Tempalte
  5. Javascript异步编程之一异步原理
  6. 混淆视听的感脚(二)
  7. 文本分类中的特征词选择算法系列科普(前言AND 一)
  8. CCNP认证后七年的三个阶段[转载]
  9. Python库安装相关问题
  10. 姜黄的毒副作用调研汇总(调研手稿一)