美文网首页关于C#的那些年
C#——方法的参数传递

C#——方法的参数传递

作者: 大鱼鱼 | 来源:发表于2020-01-06 22:52 被阅读0次
    • 在声明方法时,所定义的参数是形式参数(简称形参),这些参数的值由调用方负责为其传递,调用方传递的是实际数据,称为实际参数(简称实参),调用方必须严格按照被调用方所定义的参数类型和顺序指定实参。在调用方法时,参数传递就是将参数传递给形参的过程。方法的参数传递按性质分为按值传递与按引用传递。
      (1)按值传递
      按值传参时,系统自动把实参值赋给相对应的形参变量,即被调用的方法所接受到的只是实参数据值的一个副本。此时,实参可以是表达式,也可以是常量或变量。如果实参是表达式,系统会先计算出表达式的值,再将结果赋给形参变量。如果实参是变量,则当在方法内部更改了形参变量的数据值,不会影响实参变量的值,即实参变量和形参变量是两个不相同的变量,它们具有各自的内存地址和数据值。因此,实参变量的值传递给形参变量时是一种单向值传递。
      值类型的参数在传递时默认为按值传参。string和object虽然是应用型数据,但从表现形式形式来看,其具有按值传参的效果。
      (2)按引用传参
      C#方法被调用时一次只能返回一个结果,但实际应用中常常需要方法能够返回多个结果或修改传入的数据值并返回,如果需要完成以上任务,只能return语句是无法做到的,这时就可以使用按引用传递参数的方法来实现。
      调用方传递引用型参数给被调用方时,调用方将把实参变量的引用赋给相对应的形参变量。实参变量的引用代表数据值的内存地址,因此形参变量和实参变量将指向同一个引用。如果在方法内部更改了形参变量所引用的数据值,则同时也修改了实参变量所引用的数据值。注意,按引用传递参数时的实参只能是变量,不能是常量或表达式。
      当值类型和string类型参数要按引用传参时,可以使用ref关键字来声明引用参数,无论是形参还是实参,只要希望传递数据的引用,就必须添加ref关键字。
      例如:
      将Swap方法声明为引用型参数
      public string Swap(ref int x,ref int y)
      将Swap方法调用改为引用型传参
      lblShow.Text = x.Swap(ref a,ref b);
      该程序中,无论是实参a和b,还是形参x和y,都添加了ref关键字,因此,a和x指向的是同一个内存地址,b和y指向的是同一个内存地址,一旦改变形参x和y的值,实参a和b的值也会改变。
    • 输出参数
      1.方法中的return语句只能返回一个运算结果,虽然也可以使用引用参数返回计算机结果,但用ref修饰的参数在传参之前要求先初始化实参。但有的时候在传参之前无法确定实参值,其值应由方法调用结束后返回,这就是意味着在传参之前所指定的实参值是没有意义的。这时可以使用输出参数,但不会将实参的值传递给形参。一个方法中可允许有多个输出参数。
      C#通过out关键字来声明输出参数,无论是形参还是实参,只要是输出参数,都必须添加out关键字。
    1. 用ref和out修饰的参数都是引用参数,在方法体内对参数的修改和赋值都会被保留到实参中,但两者在使用上是有一定区别的。
      (1)
      用ref修饰的参数,在传参前必须对实参明确赋值。
      (2)
      用out修饰的参数,在传参前不需要给实参赋初值,但对应的形参必须在赋值后才能使用,且在方法结束前必须完成赋值操作。

    相关文章

      网友评论

        本文标题:C#——方法的参数传递

        本文链接:https://www.haomeiwen.com/subject/ybxlactx.html