C#初级——方法/函数(ref 和 out关键字)(引用传参和输出传参)

ref关键字

ref是引用的方式传递参数,参数必须初始化 。也就意味传入方法中的不再是形参,而是引用该实参 。ref关键字在定义 和 使用时需要在前面添加 ref关键字表示引用,对比代码如下:

ref引用传参

cs 复制代码
        //ref:引用的方式传递参数
        public static int findMax(ref int num1, ref int num2)
        //public static int findMax(int num1, int num2)
        {
            num1 *= 2;
            num2 *= 2;
            return num1 + num2;
        }
        private static void Main(string[] args)
        {
            //参数必须初始化不然会报错
            int num1 = 1;
            int num2 = 2;
            int num3 = 0;
            num3 = findMax(ref num1, ref num2);
            //num3 = findMax(num1, num2);
            
            Console.WriteLine($"num1 = {num1}, num2 = {num2}, num3 = {num3}");
                              //num1 = 2, num2 = 4, num3 = 6
            Console.ReadKey();
        }

值传参

cs 复制代码
        //ref:引用的方式传递参数
        //public static int findMax(ref int num1, ref int num2)
        public static int findMax(int num1, int num2)
        {
            num1 *= 2;
            num2 *= 2;
            return num1 + num2;
        }
        private static void Main(string[] args)
        {
            //参数必须初始化不然会报错
            int num1 = 1;
            int num2 = 2;
            int num3 = 0;
            //num3 = findMax(num1, num2);
            num3 = findMax(num1, num2);
            
            Console.WriteLine($"num1 = {num1}, num2 = {num2}, num3 = {num3}");
                              //num1 = 1, num2 = 2, num3 = 6
            Console.ReadKey();
        }

out关键字

out关键字与ref关键字一样也是引用传递,在使用out修饰的参数,在定义的时候,可以初始化,也可以不初始化,但是,在方法内部必须赋值。

out输出传参

cs 复制代码
        public static int result(int num1, int num2, out int num3)
        //public static int result(int num1, int num2, int num3)
        {
            num3 = (num1 + num2) / 2;
            return num3;
        }
        private static void Main(string[] args)
        {
            int num1 = 2;
            int num2 = 4;
            int num3 = 0;
            int avg = 0;
            avg = result(num1, num2, out num3);
            //avg = result(num1, num2, num3);
            Console.WriteLine($"avg = {avg}, num3 = {num3}");   //avg = 3, num3 = 3
            Console.ReadKey();
        }

值传递

cs 复制代码
        //public static int result(int num1, int num2, out int num3)
        public static int result(int num1, int num2, int num3)
        {
            num3 = (num1 + num2) / 2;
            return num3;
        }
        private static void Main(string[] args)
        {
            int num1 = 2;
            int num2 = 4;
            int num3 = 0;
            int avg = 0;
            //avg = result(num1, num2, out num3);
            avg = result(num1, num2, num3);
            Console.WriteLine($"avg = {avg}, num3 = {num3}");   //avg = 3, num3 = 0
            Console.ReadKey();
        }
相关推荐
小码编匠14 小时前
WPF 中的高级交互通过右键拖动实现图像灵活缩放
后端·c#·.net
唐青枫21 小时前
C#.NET 定时任务与队列利器:Hangfire 完整教程
c#·.net
hez20101 天前
Runtime Async - 步入高性能异步时代
c#·.net·.net core·clr
mudtools2 天前
.NET驾驭Word之力:玩转文本与格式
c#·.net
唐青枫2 天前
C#.NET 数据库开发提速秘籍:SqlSugar 实战详解
c#·.net
mudtools3 天前
.NET驾驭Word之力:理解Word对象模型核心 (Application, Document, Range)
c#·.net
大飞pkz3 天前
【设计模式】C#反射实现抽象工厂模式
设计模式·c#·抽象工厂模式·c#反射·c#反射实现抽象工厂模式
唐青枫3 天前
从入门到进阶:C#.NET Stopwatch 计时与性能测量全攻略
c#·.net
未来之窗软件服务3 天前
幽冥大陆(二)RDIFSDK 接口文档:布草洗涤厂高效运营的技术桥梁C#—东方仙盟
开发语言·c#·rdif·仙盟创梦ide·东方仙盟
1uther3 天前
Unity核心概念⑨:Screen
开发语言·游戏·unity·c#·游戏引擎