ref 和out的区别

在方法参数的引用传递中有两个关键字,那么这两个关键字有什么区别呢?下面将介绍二者的区别


一.ref和out的共同点


1.ref和out关键字都是指出一个值类型变量或是引用类型变量应该以引用方式传递。

2.尽管 ref 和 out 在运行时的处理方式不同,但它们在编译时的处理方式是相同的。因此,如果一个方法采用 ref 参数,而另一个方法采用 out 参数,则无法重载这两个方法,例如:从编译角度看下面两个方法是相同的,所以不能编译通过。

 public void SampleMethod(ref int i) { }     
 public void SampleMethod(out int i) { }


3.二者都可以使方法返回多个值


二.ref和out的不同点

1.out 指定一个输出参数,被调用的方法可向其赋值,所以在参数传递时可以不初始化,但是ref在传递前必须被初始化

2.out 用于传出值,ref是双向的,即可以传入也可以传出


三.实例

  class Program
    {
        static void Main(string[] args)
        {
            int result;


            Console.WriteLine("请输入一个字符串,查看是否能转化成整数类型");


            if (myTryParse(Console.ReadLine(), out result))
            {
                Console.WriteLine("转化成功,结果是{0}", result);
            }
            else 
            {
                Console.WriteLine("转化失败,您的输入不能转化成整数类型");
            }
            Console.ReadKey();
        }


        /// <summary>
        /// 试着转化字符串为int类型,如果转化成功返回true,
        /// </summary>
        /// <param name="str">要转化的字符串</param>
        /// <param name="result">参数返回转换后的int</param>
        /// <returns>是否转化成功,成功:true  失败:false</returns>

        public static bool myTryParse(string str, out int result) 
        {
            result = 0;
            try
            {
                result = Convert.ToInt32(str);
                return true;
            }
            catch (Exception ex) 
            {
                return false;
            }
        }


        public static int totol(int[] shu, out int maxNum, out int minNum) 
        {
            int totol = 0;
            maxNum =shu[0];
            minNum =shu[0];
            for (int i = 0; i < shu.Length; i++) 
            {
                totol += shu[i];


                if (maxNum < shu[i]) 
                {
                    maxNum = shu[i];
                }


                if (minNum > shu[i]) 
                {
                    minNum = shu[i];
                }
            }
            return totol;
        } 
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 中的 `ref` 和 `out` 关键字都可以用于方法参数传递,但它们有以下几点区别: 1. `ref` 关键字用于将变量按引用传递给方法,即在方法内部可以修改变量的值,并且方法调用后原变量的值也会被修改。而 `out` 关键字也用于将变量按引用传递,但它要求方法必须在方法内部为变量赋值,即方法调用后原变量的值会被修改。 2. `ref` 关键字在方法调用时需要先初始化变量,即在调用方法之前必须为变量赋初值。而 `out` 关键字则不要求变量在调用方法之前被初始化,因为方法会为其赋值。 3. `ref` 关键字在方法内部可以修改变量的值,但在方法返回后变量的值会被保留。而 `out` 关键字在方法返回前必须为变量赋值,因此方法返回后变量的值一定是被赋值后的值。 以下是 `ref` 和 `out` 的使用示例: ```csharp public void TestRef(ref int value) { value = value * 2; } public void TestOut(out int value) { value = 10; value = value * 2; } // 使用ref关键字 int x = 5; TestRef(ref x); Console.WriteLine(x); // 输出10 // 使用out关键字 int y; TestOut(out y); Console.WriteLine(y); // 输出20 ``` 在上面的示例中,`TestRef` 方法使用了 `ref` 关键字,将参数 `value` 按引用传递给方法。在方法内部修改了 `value` 的值后,原变量 `x` 的值也被修改了。 而 `TestOut` 方法使用了 `out` 关键字,要求方法必须在方法内部为变量赋值。因此,方法调用后变量 `y` 的值被赋值为 10,并在方法内部将其乘以 2,最终输出结果为 20。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值