zoukankan      html  css  js  c++  java
  • 关于参数

    小结:

    1. 按引用传递参数
    在C#中可以使用关键字out或ref来实现按引用传递参数,从CLR的角度看,out与ref生成的元数据及IL代码都是相同的。

    a. out参数在传值前可以先赋值也可以不赋,但在方法返回时必须被赋值
    b. ref参数在传值前必须先赋值,在方法返回时可以修改其值
    c. 重载仅存在out和ref差异的方法是不合法的,因为这两个方法签名的元数据表示是相同的。如:

    public sealed class Point{
        static void Add(out Int32 sx){...}
        static void Add(ref Int32 sx){...}
    }//这是不允许的

    d. 按引用传递给方法的变量类型必须要与方法签名中参数类型相同
    例子:交换两个引用类型变量的方法

    public static void Swap(ref Object o1, ref Object o2)
    {
           Object t = o1;
           o1 = o2;
           o2 = t;
    }
    
    调用1:
    public void DoSomething()
    {
         String s1 = "s1 text";
         String s2 = "s2 text";
       
         Swap(ref s1, ref s2);//编译器会提示有不合法的参数
    }
    
    调用2:
    public void DoSomething()
    {
       String s1 = "s1 text";
       String s2 = "s2 text";
       
    //要先转换成Swap声明中参数的类型 Object o1
    = s1; Object o2 = s2; Swap(ref o1, ref o2);//通过编译 }

    2. 参数数组

    public Int32 Add(params Int32[] values){...}

    a. 用params修饰的参数必须放在所有参数的后面【最后一个参数】,在传值时,可以传0个或多个值,也可以传null 值

    b. 使用参数数组时,是有损耗性能的,毕竟它是一个数组类型【引用类型】,在heap上分配空间,数组中的元素必须初始化,用完之后这个数组空间要被GC收回

    3.方法返回值与方法参数的设计规则

    a. 对于方法参数,采用弱参数类型较好,如:

    public void DoSomething(Stream someStream) {...}
    ----弱参数类型:此方法可以处理任何一种Stream类型,限制宽松,即可以是FileStream、NetworkStream、MemoryStream等,
    
    public void DoSomething(FileStream fileStream) {...}
    ----强参数类型:此方法只能处理FileStream一种类型,限制太死

    b. 对于方法的返回值,一般采用强类型较好,即限制较死

    public FileStream OpenFile() { ...}
    ----强类型
    
    public Stream OpenFile() { ...}
    ----弱类型

    4. 索引

            public Int32 this[Boolean b]
            {
                get { return 0; }
            }
            public String this[Boolean b]
            {
                get { return null; }
            }
    ----在C#中,只是名字不同是区分不了这两个索引的,只要参数类型不同就可以区分。换句话说,是依据参数类型的不同来区分索引的,不关索引名字的事。
  • 相关阅读:
    Docker磁盘垃圾清理
    什么是容器编排?
    Docker 容器连接
    docker入门操作整理
    Docker学习的几个建议和技巧
    支付清结算之电商侧处理
    在Linux 中进入单用户模式的技巧
    教你如何构建异步服务器和客户端的 Kotlin 框架 Ktor
    NetSuite助力各行业企业快速发展
    linux需要你的不懈努力
  • 原文地址:https://www.cnblogs.com/notebook2011/p/2932863.html
Copyright © 2011-2022 走看看