Ref_Out

本文详细介绍了C#中的ref和out参数的使用方法及其区别。ref用于修改外部传入的值,要求变量已初始化;out用于为外部变量赋值,无需提前初始化。文章通过具体示例展示了如何利用这两种参数实现变量交换及多值返回等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<>

ref应用场景是内部对外部传进了的值进行改变。既然从外部传进了值,那么外部变量就需要先初始化

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

namespace Ref_Out
{
    //ref应用场景是内部对外部传进了的值进行改变。既然从外部传进了值,那么外部变量就需要先初始化(赋值)
    class Ref
    {
        public static void IncAge(int age)
        {
            age++;
        }

        public static void IncAge2(ref int age2) //ref必须要配对使用
        {
            age2++;
        }

        //ref应用场景
        public static void Swap(ref int i1, ref int i2)
        {
            int temp;
            temp = i1;
            i1 = i2;
            i2 = temp;
        }
    }

    //out应用场景是内部为外部变量赋值,所以不需要先初始化(赋值),只要在函数里面为参数赋值
    //out一般用在函数有多个返回值的场所【一个函数(方法)只能有一个返回值,如果想要有多个返回值就用out】
    class Out
    {
        public static void IncAge(int age)
        {
            age++;
        }

        //out内部
        public static void IncAge2(out int age2)
        {
            age2 = 30;//使用out引用参数必须在函数里面对参数进行赋值,否则就报错“使用了未赋值的out参数age2,控制离开当前方法之前必须对out参数age2赋值”
            age2++;
        }
    }

    
    class Program
    {
       
        static void Main(string[] args)
        {
            //======================================================================Ref
            int ref_age = 10;
            Ref.IncAge(ref_age);
            Console.WriteLine(ref_age);//输出10

            
            int ref_age2 = 10;//使用ref引用,参数必须要先赋值
             Ref.IncAge2(ref ref_age2);
            Console.WriteLine(ref_age2);//输出11


            //ref使用实例<交换两个变量i1与i2的值>
            int i1 = 10;
            int i2 = 20;
            Ref.Swap(ref i1, ref i2);//通过引用参数将i1与i2的引用交换,而不是普通的将拷贝交换
            Console.WriteLine("i1={0},i2={1}",i1,i2);


            //======================================================================Out


            int out_age = 10;
            Out.IncAge(out_age);
            Console.WriteLine(out_age); //输出10

            int out_age2 = 10; //使用out引用,外部不需要赋值,即便赋值了也没用,
            Out.IncAge2(out out_age2);
            Console.WriteLine(out_age2); //输出31


            //out使用实例
            
            string str = Console.ReadLine();//读取用户输入的文字
            int i;
           // int.TryParse(str, out i);//它的返回值是一个布尔值,这句代码的意思其实就是将用户输入的文字转换成int 类型的数字,如果转换成功就返回一个true,转换不成功就返回false

            if (int.TryParse(str, out i)) //这条语句其实有两个返回值,一个是bool值,一个是i
            {
                Console.WriteLine("转换成功{0}",i);
            }
            else
            {
                Console.WriteLine("转换失败");
            }
            


            Console.ReadKey();
        }
    }
}

<2>

使用out引用参数必须在函数里面对参数进行赋值,否则就报错“使用了未赋值的out参数

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

namespace Test
{
    public class Test
    {
        public static void ClassA()
        {
            string a = "";
            string b = "";

            string c = Test.GetP(out a, out b); //调用GetP()方法,将两个未赋值的 a,b作为参数,在GetP()方法中给a,b赋值。然后得到赋值后的a,b。还得到GetP()方法的返回值。 所以这个Test.GetP(out a, out b)方法获取到了3个返回值。

            Console.WriteLine("a={0};b={1}; c={2}", a, b, c); //输出:a=张三; b=李四; c=王五
            Console.ReadKey();
        }

        //一个方法本来只能有一个返回值。但是我们想在一个方法中获得多个返回值怎么办呢? 对:我们可以out参数

        //我们通过out将参数a,b在GetP()方法中将赋值,然后再将它返回回去。那么在方法外面,可以通过调用这个方法来获取 a,b两个已经赋值了的参数。还可以得到GetP()方法本身的放回值。
        public static string GetP(out string a, out string b)
        {
            a = "张三";  //将这个参数赋值张三
            b = "李四";  //将这个参数赋值李四

            return "王五"; //GetP()方法的返回值是王五。
        }
        
    }

    class Program
    {
        static void Main(string[] args)
        {
            Test.ClassA();  //执行这段代码:输出:a=张三; b=李四; c=王五
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值