当前位置:首页 > C#学习

函数的ref、out参数

小道8年前 (2018-08-20)C#学习6406

函数参数默认是值传递的,也就是“复制一份”

ref必须先初始化,因为是引用,所以必须先“有”,才能引用,而out则是内部为外部赋值,所以不需要初始化,而且外部初始化也没用。

ref应用场景内部对外部的值进行改变,out则是内部为外部变量赋值,out一般用在函数有多个返回值的场所。

        static void Main(string[] args)
        {
            int age = 20;//定义一个整型变量
            int i = 10;//定义一个整型变量
            J(ref age);//传递ref  必须先给 变量一个值(初始化)。ref必须写++++++++
            K(out i);//out无须先给一个值(初始化)。out必须写-----------
            Console.WriteLine("输出age的值为:{0}", age);
            Console.WriteLine("输出i的值为:{0}",i);//
            Console.ReadKey();//按任意键退出。
        }
        static void  J(ref int age)//ref  可以返回值。无须赋值。  age必须接收一个值。ref必须写+++++++++
        {
            age++;//接收到20自增1,并返回。
        }
        static void K(out int i) //out 不接收外部变量的值。  out一般多用于 多个返回值。out必须写-----------
        {
            i = 1;//接收的变量,必须在里面赋值。外面的赋值也函数内部无关,必须在函数内重新赋值。
        }

输出结果:

image.png

案例:两个变量的交换;

        static void Main(string[] args)
        {
            int i1 = 10;//定义一个整型变量
            int i2 = 20;//定义一个整型变量
            S(ref i1,ref i2);//ref 可以传递值,并且可以返回处理后的值。
            Console.WriteLine("i1={0} i2={1}",i1,i2);//输出结果。
            Console.ReadKey();//按任意键退出
        }
        static void S(ref int i1,ref int i2)//接收到要处理的值,处理完成后,返回处理后的值、
        {
            int temp = i1;//将i1值赋给temp。
            i1 = i2;//将i2值赋给i1。
            i2 = temp;//将temp值赋给i2。
        }

输出结果:

image.png

通过使用 int.TryParse 判断输入的值是否可以转变成整型。

            Console.WriteLine("请输入一个字符串。");
            string s = Console.ReadLine();
            int i;
            if (int.TryParse(s, out i))//Tryparse 可以传递两个值。out返回一个布尔类型的值。
            {//Tryparse是判断s字符串是否能转变成一个int整型变量。out i 返回一个布尔值。
                Console.WriteLine("可转换。");
            }
            else
            {
                Console.WriteLine("不可以转换。");
            }

输出结果:

image.pngimage.png

扫描二维码推送至手机访问。

版权声明:本文由小道发布,如需转载请注明出处。

本文链接:https://www.daobk.com/post/33.html

分享给朋友:

“函数的ref、out参数” 的相关文章

第一个Windows程序

第一个Windows程序

WinForm:Windows Form,.Net中用来开发Windows窗口程序的技术,无论是之前学的控制台程序,还是后面要学的ASP.Net都是调用.Net框架,因此所有知识点都是一样的。新建一个Windows项目:Windows→Windows窗体应用程序控件:窗口上很多元素都是相似的,因此将…

C#的二维数组的声明和访问

C#的二维数组的声明和访问

C#的二维数组的声明和访问二维数组,就是以数组作为元素的数组。挺拗口的,看看它跟一维数组的对比:左边的 a 是一维数组,数组中包含 4 个 int 型变量:a[0]、a[1]、a[2]、a[3] 。右边的 b 是二维数组,数组中包含 2 个 int 型一维数组:b[0]、b[1] 。而 b[0] 和…

C# 结构体(Struct)

C# 结构体(Struct)

在 C# 中,结构体是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据。struct 关键字用于创建结构体。结构体是用来代表一个记录。C# 结构的特点C# 中的结构有以下特点:结构可带有方法、字段、索引、属性、运算符方法和事件。结构可定义构造函数,但不能定义析构函数。但是,您不能为结…

Dispose和Close区别.

Dispose和Close区别.

Dispose和Close区别:            SqlConnection conn = new SqlConnection(@&q…