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();
        }
相关推荐
czhc11400756635 小时前
从一份运行日志还原一次生产卡死:三个信号与一场“假卡死“
c#
Jazz_z6 小时前
如何用 C# 读取 Word 中的表格数据
开发语言·c#
阿松爱学习8 小时前
【Unity开发】FileStream 详解及用法指南
unity·c#·unity开发
淡海水10 小时前
12-02-性能-数据结构性能调查案例1-5
数据结构·性能优化·c#
Java的搬运工10 小时前
使用 C# 轻松管理 PDF 文件的用户权限
c#·用户权限
Neil20131 天前
ajax跨域请求
c#
唐青枫1 天前
别把 Razor 当成几段 HTML:C#.NET Razor Pages、MVC 视图与实战详解
c#·.net
专注仿真1 天前
CMO模型文档-活动单元基类
c#·模型·cmo·活动单元基类
我是苏苏1 天前
Agent 开发实战 :C#实现语义检索!向量数据库Qdrant的下载安装及调试步骤
c#·ai编程
光泽雨1 天前
IEnumerable<T> 详细讲解
c#·c