• CLR via C#学习笔记-第九章-可选参数和命名参数


    9.1 可选参数和命名参数

    设计方法的参数时,可为部分或全部参数分配默认值。

    然后调用这些方法的代码可以选择不提供部分实参,使用其默认值。

    此外调用方法时可通过指定参数名称来传递实参。

    private static void M(Int32 x=9,String s="A",DateTime dt=default(DateTime),Guid guid=new Guid()){}

    如果调用时省略了一个实参,C#编译器会自动嵌入参数的默认值。

    规则和原则

    如果在方法中为部分参数指定了默认值

    1.可为方法、构造器和有参属性(C#索引器)的参数指定其默认值。

    2.有默认值的参数必须放在没有默认值的所有参数之后。但参数数组这种参数必须放在所有参数之后,数组本身不能有默认值。

    3.默认值必须是编译时能确定的常量值。如基元类型、枚举、能设置为null的任何引用类型。

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

    //不要这样做
    private static String MakePath(String filename="Untitled")
    {
        return String.Format(@"C:{0}.txt",filename);
    }
    //而要这样做
    private static String MakePath(String filename=null)
    {
        return String.Format(@"C:{0}.txt",filename??"Untitled");
    }

    5.如果参数用ref或out关键字进行了标识,就不能设置默认值。因为没有办法为这些参数传递有意义的默认值。

    使用可选或命名参数调用方法时要注意

    1.实参可按任意顺序传递,但命名实参只能出现在实参列表的尾部

    2.可按名称将实参传给没有默认值的参数,但所有必须的实参都必须传递,编译器才能编译代码。

    3.C#不允许省略逗号之间的实参。

    4.如果参数要求ref/out,为了以传参数名的方式传递实参,使用以下语法

    private static void M(ref Int32 x){}
    Int32 a=5;
    M(x:ref a);
  • 相关阅读:
    【Codeforces Round#279 Div.2】B. Queue
    210
    回溯
    HuffmanTree && HuffmanCode
    (转)STL
    2013 ACM/ICPC 长沙现场赛 A题
    不是数据库中的列,而是查询结果集中的列
    又出现新问题,所以又发现了之前的一些问题 (关于修改表单地址,要不要改回来的问题) 原因已经解决
    MyEclipse导入jquery-1.8.0.min.js等文件报错的解决方案
    为什么突然 选择删除的按钮失效???
  • 原文地址:https://www.cnblogs.com/errornull/p/9818064.html
Copyright © 2020-2023  润新知