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函数一样

猜你喜欢

转载自blog.csdn.net/qq_17813937/article/details/79080847