zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    c#web中定义全局变量,传递变量
    关于Dropdownlist 与 autopostBack 问题多级联动 例 省/市/区
    发布附件应用小研究
    dell更换同型号的主板注意
    dotnet文本编辑器控件的应用
    小结解决双网卡网关问题(route add p) 关于静态路由
    读取数据表中符合条件的记录和数目
    密码最短长度为 7,其中必须包含以下非字母数字字符: 1(转)
    Hibernate 中的核心接口与类
    什么是整洁的代码(Clean Code)?
  • 原文地址:https://www.cnblogs.com/errornull/p/9818064.html
Copyright © 2011-2022 走看看