• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

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

传递类型 参数数据类型为值类型和引用数据类型 特点
值传递 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);

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
使用C#创建Windows服务发布时间:2022-07-10
下一篇:
OpenGLC#绘图环境配置发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap