C# 中的值传递与引用传递

首先明确一个概念:值传递和引用传递,是指在方法中传递参数的方式。

既然是在方法的区别的话,那么我们首先首先总结几个方法出来。

传递类型参数数据类型为值类型和引用数据类型特点
值传递Sum(int num1,int num2)修改了形参内容,结果不会保留
Sum(int [] num1)修改了形参内容,结果会保留
引用传递Sum(ref int num1,ref int num2)使用 ref ,实参必须要初始化赋值;修改了形参内容,结果会保留
Sum(out int num1,out int num2)使用out,形参必须要赋值;修改了形参内容,结果会保留

 

示例:

定义一个计算器类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Lesson3
{

    /// <summary>
    /// 计算器类
    /// </summary>
    public class Calc
    {
        /// <summary>
        /// 求和:参数是int——值类型
        /// </summary>
        public int Sum(int num1, int num2)
        {

            int sum = 0;
            num1 = 10;
            sum = num1 + num2;

            return sum;

        }

        /// <summary>
        /// 求和:参数是数组——引用类型
        /// </summary> 
        public int SumParam(int[] nums)
        {
            nums[0] = 10;
            int sum = nums[0] + nums[1];

            return sum;
        }

        /// <summary>
        /// 求和:参数是值类型——引用传递
        /// </summary> 
        public int SumRef(ref int num1, ref int num2) {
            int sum = 0;
            num1 = 10;
            sum = num1 + num2;

            return sum;

        }

        /// <summary>
        /// 交换两个数
        /// </summary>
        /// <param name="num1"></param>
        /// <param name="num2"></param>
        public void Swap(int num1,int num2) {

            int temp = 0;

            temp = num1;
            num1 = num2;
            num2 = temp;

        }


        /// <summary>
        /// 交换两个数
        /// </summary>
        /// <param name="num1"></param>
        /// <param name="num2"></param>
        public void SwapRef(ref int num1, ref int num2)
        {

            int temp = 0;

            temp = num1;
            num1 = num2;
            num2 = temp;

        }
    }
}

 

测试类:

// 求和:值传递
            Calc calc = new Calc();
            int num1 = int.Parse(Console.ReadLine());
            int num2 = int.Parse(Console.ReadLine());

            // 
            int sum = calc.Sum(num1, num2);

            // 输出和
            Console.WriteLine(num1 + "+" + num2 + "=" + sum);


            // 求和:参数是数组——值传递
            Calc calc1 = new Calc();

            int[] nums = { 1, 2 };


            int sum1 = calc1.SumParam(nums);
            // 输出和
            Console.WriteLine(nums[0] + "+" + nums[1] + "=" + sum1);



            // 求和:参数是ref关键字——引用传递
            Calc calc2 = new Calc();
            int refNum1 = 1;
            int refNum2 = 2;

            int refSum = calc2.SumRef(ref refNum1, ref refNum2);

            // 输出和
            Console.WriteLine(refNum1 + "+" + refNum2 + "=" + refSum);




            // 交换两个数

            //Calc calc = new Calc();

            //int num1 = 8;

            //int num2 = 10;
            //Console.WriteLine("值传递:交换前的数是" + num1 + "," + num2);

            //// 交换
            //calc.Swap(num1, num2);
            //Console.WriteLine("值传递:交换后的数是" + num1 + "," + num2);




            //int num1Ref = 8;

            //int num2Ref = 10;
            //Console.WriteLine("引用传递:交换前的数是" + num1Ref + "," + num2Ref);

            //// 交换
            //calc.SwapRef(ref num1Ref, ref  num2Ref);
            //Console.WriteLine("引用传递:交换后的数是" + num1Ref + "," + num2Ref);

 

转载于:https://www.cnblogs.com/xiaobudong/p/6754434.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值