zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    js提交表单错误:document.form.submit() is not a function
    eclipse中把多个项目放在一个work set下
    SpringMVC源码分析系列
    java.util.ConcurrentModificationException详解
    java动态代理(JDK和cglib)代码完整版本
    java静态代理和动态代理
    看完这5张图!不同类型停车位的停车技巧get!
    记住这6个方法,让你的车辆轻松过年检!
    B样条 理论基础
    virtual studio 主题更换
  • 原文地址:https://www.cnblogs.com/xiaobudong/p/6754434.html
Copyright © 2011-2022 走看看