C#参数传递类型及机制

一、值传(value),引用传(ref,out)

我们知道值传递其实就是在函数内部copy了一个参数的副本,而引用传递传递的是实参的地址。

ref和out区别是什么呢?ref可进可出,out只出不进。参数标记为ref的,在调用之前必须初始化,out不需要初始化,但是在返回时必须进行赋值。

在同一个类中不能对ref和out同时进行重载。可以和普通值传递进行重载。

二、params可变参数

参数个数不固定情况下

1、如果有几种类型的参数,则params修饰的必须放到最后

形式为:方法修饰符 返回类型 方法名(params 类型[] 变量名)


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

namespace ConsoleApplication1
{
    class Program
    {
        public static void swap1(int a, int b)
        {
            int temp = a;
            a = b;
            b = temp;

        }

        public static void swap1(ref int a, ref int b)
        {
            int temp = a;
            a = b;
            b = temp;
        }
        //不能这样,否则会提示无法重载的错误
        //public static void swap1(out int a, out int b)
        //{
        //    int temp = a;
        //    a = b;
        //    b = temp;
        //}
        public static void swap2(out int a, out int b)
        {
            //Console.WriteLine(">>>>a=" + a + ">>>b=" + b);//没有赋值不能使用
            a = 3;
            b = 4;
        }

        //可变参数
        public static int add(params int[] list)
        {
            int sum = 0;
            foreach (int i in list)
            {
                sum += i;
            }
            return sum;
        }

        static void Main(string[] args)
        {
            int a = 1, b = 2;//必须初始化,否则ref会报错
            //int a, b;
            Console.WriteLine(">>>>a="+a+">>>b="+b);

            swap1(a,b);

            Console.WriteLine(">>>>a=" + a + ">>>b=" + b);

            swap1(ref a, ref b);//必须明确为ref

            Console.WriteLine(">>>>a=" + a + ">>>b=" + b);

            swap2(out a,out b);//必须明确为out

            Console.WriteLine(">>>>a=" + a + ">>>b=" + b);

            int[] arrs = { 1,2,3,4,5};

            int sum=add(arrs);

            Console.WriteLine(">>>>>sum="+sum);

            Console.WriteLine("按任意键退出....");

            Console.ReadKey(false);

        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值