C#中值参数、引用参数、输出参数的区别



值参数、引用参数、输出参数

2.1值参数(value parameters)未用 ref out 修饰符声明的参数为值参数。值参数在调用该参数所属的函数成员(方法、实例构造函数、访问器或运算符)时开始存在,并用调用中给定的自变量的值初始化。当返回该函数成员时值参数停止存在。出于明确赋值检查的目的,值参数被视为初始已赋值。

2.2 引用参数(reference parameters

ref 修饰符声明的参数是引用参数。引用参数不创建新的存储位置。相反,引用参数表示的是那个在对该函数成员调用中被当作自变量的变量所表示的同一个存储位置。因此,引用参数的值总是与基础变量相同。

下面的明确赋值规则适用于引用参数。

●变量在可以作为引用参数在函数成员调用中传递之前,必须已明确赋值即必须被初始化。

●在函数成员内部,引用参数被视为初始已赋值。

●在结构类型的实例方法或实例访问器内部,this 关键字的行为与该结构类型的引用参数完全相同

2.3输出参数(output parameters

out 修饰符声明的参数是输出参数。输出参数不创建新的存储位置。相反,输出参数表示的是那个在对该函数成员调用中被当作自变量的变量所表示的同一个存储位置。因此,输出参数的值总是与基础变量相同。下面的明确赋值规则应用于输出参数。变量在可以作为输出参数在函数成员调用中传递之前不一定要明确赋值。

●在正常完成函数成员调用之后,每个作为输出参数传递的变量都被认为在该执行路径中已赋值。

●在函数成员内部,输出参数被视为初始未赋值。

●函数成员的每个输出参数在该函数成员正常返回前都必须已明确赋值。

●在结构类型的实例构造函数内部,this 关键字的行为与结构类型的输出参数完全相同

引用参数和值参数区别
      
引用参数相当于是引用参数的地址,函数定义时和函数调用时都必须用 ref 关键字,在调用函数参数的值改变将会影响到参数的实际值,而值参数传递时,先开辟一块内存块,然后拷贝一份放到新开辟的内存块中,这样调用时是调用新内存块中的值,修改也不会使原来的值改变。

引用参数和输出参数区别

       引用参数在传递之前必须进行初始化,而输出参数传递不需要。两个都可以在内部修改他的值
具体什么时候用,ref主要还是对于值类型,out可以处理一个没有初始化的数组。
举例:

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication1

{

    class Program

    {

        static void valueparameters(int x, int y)

        {

            ++x;

            ++y;

        }

        static void referenceparameters(ref int x, ref int y)

        {

            ++x;

            ++y;

        }

        static void outputparameters(out int m, out  int n, ref int z)

        {

            m = 12;

            n = 12;

            z++;

        }

        static void Main(string[] args)

        {

            int x = 10;

            int y = 20;

            valueparameters(x, y);

            Console.WriteLine("x={0},y={1}", x, y);

            referenceparameters(ref x, ref y);

            Console.WriteLine("x={0},y={1}", x, y);

            int m, n;

            int z = 1;

            outputparameters(out m, out n, ref z);

            Console.WriteLine("m={0},n={1},z={2}",m,n,z);

        }

    }

    /*结果:

x=10,y=20

x=11,y=21

m=12,n=12,z=2

请按任意键继续. . .

    */

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值