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();
        }
相关推荐
雪飞鸿5 小时前
ArrayPoolWrapper简洁、安全的ArrayPool
c#·.net·.net core·原创
海盗12345 小时前
C#上位机开发-S7协议通信
开发语言·c#
FeBaby5 小时前
ReentrantLock 与 synchronized 底层实现对比图解
开发语言·c#
烟话67 小时前
C# 内存机制详解:值类型、引用类型与 String 的不可变性
java·jvm·c#
我是唐青枫7 小时前
C#.NET MemoryMarshal 深入解析:零拷贝内存重解释、二进制读写与使用边界
c#·.net
susan花雨8 小时前
C#异步并行处理的用法
c#
weixin_520649879 小时前
Winform创建与启动
开发语言·c#
武藤一雄9 小时前
WPF中逻辑树(Logical Tree)与可视化树(Visual Tree)到底是什么
microsoft·c#·.net·wpf·.netcore
周杰伦fans9 小时前
深入 C# 匿名类型:从 `new { Ask = ask }` 说起
开发语言·c#