C# 函数、委托和可变参数

using System;

namespace ConsoleApp1
{
    //! 5
    delegate int Max(int a,int b);
    class Program
    {
        public void show()
        {

        }
        //! 1
        public void max()
        {
            Console.Write(123);
            return;
            //! 2
            Console.Write(321);
        }
        //! 3
        public int max(int a, int b)
        {
            return a > b ? a : b;
        }

        public double max(double a, double b)
        {
            return a > b ? a : b;
        }
        
        static void Main(string[] args)
        {
            Program p = new Program();
            //! 4
            p.max();
            //! 6
            Max deleteMax = p.max;
            //! 7
            Console.WriteLine(deleteMax(1, 2));
            Console.WriteLine(p.max(1.5, 2.9));
        }
    }
}

1、定义函数 max
2、由于已经使用关键字 return 返回,所以后面的代码将不会执行
3、重载函数 max,重载时必须使用与已经定义的函数不同的参数。重载的函数编译器会自动匹配对应的函数
4、使用在类 Program 定义的函数 max
5、定义委托类型,类似于C的函数指针
6、创建委托变量并且初始化为 Program类的max(int,int)
7、使用委托调用函数


函数定义语法:

返回类型 名称(参数列表)
{
    //代码段
    return 返回值;
}
如果返回值类型为 void 那么可以不写 return 语句

delete 返回类型 名称(参数列表);
委托变量必须初始化后才能调用,不然会抛出异常


如果参数数量不是固定的那么可以使用关键字 params 声明一个可变参数数组

using System;

namespace ConsoleApp1
{
    class Program
    {
        public static int Max(int a , int b)
        {
            return a > b ? a : b;
        }

        public static int Max(int value, params int [] values)
        {
            int max = value;
            foreach(var val in values)
            {
                max = Max(max, val);
            }
            return max;
        }

        public static void Show(params object [] values)
        {
            for(int i = 0; i < values.Length; i++)
                Console.WriteLine(values[i].ToString());
        }
        
        static void Main(string[] args)
        {
           Console.WriteLine( Max(1, 2, 3, 4, 5, 99, 7, 8, 9, 10));
           Show(555,new Program());
        }
    }
}

可变参数数组必须准守以下几点:

1、若形参表中含一个可变参数数组,则该可变参数数组必须位于形参列表的最后
2、可变参数数组必须是一维数组
3、不允许将params修饰符与ref和out修饰符组合起来使用
4、与可变参数数组对应的实参可以是同一类型的数组名,也可以是任意多个与该数组的元素属于同一类型的变量
5、若实参是数组则按引用传递,若实参是变量或表达式则按值传递


当然如果你想要参数接收看上去不同类型的参数可以使用object[]作为参数类型


其使用结果就像上面的Show函数一样

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鱼游戏开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值