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);
  • 相关阅读:
    Python——项目-小游戏_正式的进入开发阶段_1阶段 主程序&背景移动
    Ajax-使用教程
    JavaScript——类还有对象
    Python——项目-小游戏3-精灵?蓝精灵?
    Python——项目-小游戏2-动画绘制
    jQuery——有关于jQuery操作 属性,元素,还有尺寸位置等
    Python——项目-小游戏
    jQuery入门
    JavaScript——WEBAPIS_有关于移动端特效,还有本地存储
    性能优化之Angular前端优化总结
  • 原文地址:https://www.cnblogs.com/errornull/p/9818064.html
Copyright © 2011-2022 走看看