zoukankan      html  css  js  c++  java
  • 总结:CLR Via C#(第八章):其他(方法传递、out、ref)

    通过引用向方法传递参数:

    1Outref的区别:

    如果方法的参数标记为out参数可以不初始化,但必须在返回之前对对象赋值;

    如果方法的参数标记为ref,参数必须在调用之前初始化;

             也就是说,对大量值类型使用关键字out后,代码效率会提高;

    2CLR允许基于方法对outref参数的使用来重载方法,但仅存在outref差异的方法是不允许的;

            static void Add(int i)

            {

            }

     

            static void Add(out int i)

            {

            }

         如果加入下面方法,就会出错

    //Error:Add不能定义仅在ref 和out 上有差别的重载方法

            static void Add(ref int i)

            {

            }

    向方法传递可变数量的参数:

    关键字params是应用于方法签名的最后一个参数;

         private static Int32 Add(params Int32[] values) {

             // NOTE: it is possible to pass the 'values'

             // array to other methods if you want to.

     

             Int32 sum = 0;

             for (Int32 x = 0; x < values.Length; x++)

                  sum += values[x];

             return sum;

         }

     

         private static void DisplayTypes(params Object[] objects) {

             foreach (Object o in objects)

                  Console.WriteLine(o.GetType());

         }

    注意:对可接受可变参数数量的方法的调用会导致一些额外的性能损失;

              最好的方法是对方法进行重载;

    声明方法的参数类型:

    声明方法的参数类型时,尽可能指定弱类型;

    方法的返回类型,尽量指定强类型;

    如果为了保留更多的灵活性,返回类型可以指定弱类型;

  • 相关阅读:
    python 取整的两种方法
    django class-based view 考古
    django缓存基于类的视图
    MySQL参数优化案例
    django后台使用MySQL情况下的事务控制详解
    讲讲python“=”运算符上的优雅语法
    p标签不折行的问题
    django-TDD
    session 和 flask_session 实现原理(源码解析)
    网关地址和网关IP是什么,他们有什么关系?
  • 原文地址:https://www.cnblogs.com/LeimOO/p/1654340.html
Copyright © 2011-2022 走看看