C#语法之函数

最近白天没球事,觉得不能混吃等死,重拾了C#。

第一篇: C# 函数

这里记录的主要是跟C之间的差异:

1.可变参数:

即不定长参数。

关键词: params

/*可变参数*/
        static int SumVals(params int[] i_list)
        {
            int l_sum = 0;
            foreach (int l_i in i_list)
            {
                l_sum += l_i;
            }
            return l_sum;
        }


TakeTheMax(out l_max, 1, 2, 3, 4, 5, 10, 5);

2.引用参数:

即指针参数(本人下的定义,可能不严谨)

关键词: ref

/*引用参数(指针参数)*/
        static void ChangeRadian2Deg(ref double io_val)
        {
            io_val = io_val * 180.0 / Math.PI;
        }

double l_val = 3.14;
ChangeRadian2Deg(ref l_val);

3.输出参数:

即指针参数(本人下的定义,可能不严谨)

关键词:out

/*输出参数(指针参数)*/
        static void TakeTheMax(out int o_max, params int[] i_list)
        {
            o_max = 0;
            if (i_list.Length > 0)
            {
                o_max = i_list[0];
            }
            foreach(int l_i in i_list)
            {
                o_max = o_max > l_i ? o_max : l_i;
            }
        }

int l_max = 0;
TakeTheMax(out l_max, 1, 2, 3, 4, 5, 10, 5);

4.重载:

函数名一样,但是参数不一致

/*重载,(重载比较浪费代码)*/
        static void TakeTheMin(out int o_min, params int[] i_list)
        {
            o_min = i_list.Length > 0 ? i_list[0] : 0;
            foreach(int l_i in i_list)
            {
                o_min = o_min > l_i ? l_i : o_min;
            }
        }

        static void TakeTheMin(out double o_min, params double[] i_list)
        {
            o_min = i_list.Length > 0 ? i_list[0] : 0;
            foreach(double l_i in i_list)
            {
                o_min = o_min > l_i ? l_i : o_min;
            }
        }

int l_min_int = 0;
double l_min_double = 0.0;
TakeTheMin(out l_min_int, 1, 2, 3, 4, 5);
TakeTheMin(out l_min_double, 1.0, -1.0, 2.0);


5.委托:

即指针函数

/*定义委托类型(类比函数指针)*/
        delegate double DeleFuncType(double i_val_1, double i_val_2);
 /*定义与委托匹配的2个函数*/
        static double Multi(double i_val_1, double i_val_2)
        {
            return i_val_1 * i_val_2;
        }

        static double Add(double i_val_1, double i_val_2)
        {
            return i_val_1 + i_val_2;
        }

 /*使用委托的实例*/
        static void UseDel()
        {
            DeleFuncType l_func;
            char l_user_input;
            /*获取用户输入,知道输入的为M 或者 A*/
            do 
            {
                Console.WriteLine("Enter your choise, 'M' for Multiple, 'A' for Add : ");
                l_user_input = Convert.ToChar(Console.Read());
                /*怎么清空输入缓冲区呢??  怎么没有Flush函数????*/
            } while (l_user_input != 'M'&&
                l_user_input != 'm'&&
                l_user_input != 'A'&&
                l_user_input != 'a');

            /*如果为M/m则相乘,否则相加*/
            if ('M' == l_user_input||
                'm' == l_user_input)
            {
                l_func = Multi;
            }
            else
            {
                l_func = Add;
            }
            Console.WriteLine("5.0 */+ 3.0 = {0}", l_func(5.0, 3.0));
        }

6.主函数的输入参数:

在C中mian函数的第一个参数肯定是应用程序名称,但是在C#中不是!

 /*主函数的参数没有包含应用程序名!!!!*/
            Console.WriteLine("params num: {0}", args.Length);


最后附上该章节的完整代码:

using System;


namespace FuncTst
{
    class Program
    {
        /*定义委托类型(类比函数指针)*/
        delegate double DeleFuncType(double i_val_1, double i_val_2);

        /*定义与委托匹配的2个函数*/
        static double Multi(double i_val_1, double i_val_2)
        {
            return i_val_1 * i_val_2;
        }

        static double Add(double i_val_1, double i_val_2)
        {
            return i_val_1 + i_val_2;
        }

        /*使用委托的实例*/
        static void UseDel()
        {
            DeleFuncType l_func;
            char l_user_input;
            /*获取用户输入,知道输入的为M 或者 A*/
            do 
            {
                Console.WriteLine("Enter your choise, 'M' for Multiple, 'A' for Add : ");
                l_user_input = Convert.ToChar(Console.Read());
                /*怎么清空输入缓冲区呢??  怎么没有Flush函数????*/
            } while (l_user_input != 'M'&&
                l_user_input != 'm'&&
                l_user_input != 'A'&&
                l_user_input != 'a');

            /*如果为M/m则相乘,否则相加*/
            if ('M' == l_user_input||
                'm' == l_user_input)
            {
                l_func = Multi;
            }
            else
            {
                l_func = Add;
            }
            Console.WriteLine("5.0 */+ 3.0 = {0}", l_func(5.0, 3.0));
        }

        /*可变参数*/
        static int SumVals(params int[] i_list)
        {
            int l_sum = 0;
            foreach (int l_i in i_list)
            {
                l_sum += l_i;
            }
            return l_sum;
        }

        /*引用参数(指针参数)*/
        static void ChangeRadian2Deg(ref double io_val)
        {
            io_val = io_val * 180.0 / Math.PI;
        }

        /*输出参数(指针参数)*/
        static void TakeTheMax(out int o_max, params int[] i_list)
        {
            o_max = 0;
            if (i_list.Length > 0)
            {
                o_max = i_list[0];
            }
            foreach(int l_i in i_list)
            {
                o_max = o_max > l_i ? o_max : l_i;
            }
        }

        /*重载,(重载比较浪费代码)*/
        static void TakeTheMin(out int o_min, params int[] i_list)
        {
            o_min = i_list.Length > 0 ? i_list[0] : 0;
            foreach(int l_i in i_list)
            {
                o_min = o_min > l_i ? l_i : o_min;
            }
        }

        static void TakeTheMin(out double o_min, params double[] i_list)
        {
            o_min = i_list.Length > 0 ? i_list[0] : 0;
            foreach(double l_i in i_list)
            {
                o_min = o_min > l_i ? l_i : o_min;
            }
        }

        static void Main(string[] args)
        {
            double l_val = 3.14;
            int l_max = 0;
            int l_min_int = 0;
            double l_min_double = 0.0;
            /*主函数的参数没有包含应用程序名!!!!*/
            Console.WriteLine("params num: {0}", args.Length);
            Console.WriteLine("Sum val = {0}, {1}", SumVals(), SumVals(1, 2, 3));
            ChangeRadian2Deg(ref l_val);
            Console.WriteLine("Radians(3.14) = Deg({0})", l_val);
            TakeTheMax(out l_max, 1, 2, 3, 4, 5, 10, 5);
            Console.WriteLine("The max is : {0}", l_max);
            TakeTheMin(out l_min_int, 1, 2, 3, 4, 5);
            TakeTheMin(out l_min_double, 1.0, -1.0, 2.0);
            Console.WriteLine("The min is : {0}, {1}", l_min_int, l_min_double);
            UseDel();
            Console.ReadKey();
        }
    }
}



最后,提出一个问题,怎么清空输入输出的缓冲区。

一般来说我  Consle.Read()了之后,需要把输入缓冲区清空,但是找了半天没找到!!!!  虽然有人推荐用ReadLine,但是还是比较不习惯!!!!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值