C#(2)函数

 6.函数

  6.1定义和使用函数

  函数定义时都要使用static关键字,同时函数命名一般用PascalCasing方法

6.11 函数的返回值

     返回值可以是返回类型,或者是隐式转换值

 static double GetVal()

        {

            double checkVal = 8;

            if (checkVal < 5)

 

                return checkVal;

                ;

        }

 

        static void Main(string[] args)

        {

            GetVal();

        }

这种情况是不行的因为GetVal()函数没有返回值

注意:当然在返回值为void类型的函数也可以有return;但return后不能加任何变量。

6.12参数

  带有参数数组的函数定义static void GetVal(int [] intArray)

 1参数数组(需添加关键字params

 

 例如:

static int SumVals(params int[] vals)

        {

            int sum = 0;

            foreach (int val in vals)

            {

                sum += val;

            }

            return sum;

        }

             

        

 

        static void Main(string[] args)

        {

            int sum = SumVals(1,5,2,9,8);

            Console.WriteLine("Summen values = {0}", sum);

            Console.ReadKey();

           

        }

 2引用参数(关键字ref

       定义函数:static int SumVals( ref int val)

        调用函数   SumVals( ref   val1)

注意:在进行引用传参时,val1一定是已经赋值的变量,

3输出函数(关键字out

一个典型的应用是计数。

例如:

static int MaxValue(int[] intArray, out int maxIndex)

        {

            int maxVal = intArray[0];

            maxIndex = 0;

            for (int i = 1; i < intArray.Length; i++)

            {

                if (intArray[i] > maxVal)

                {

                    maxVal = intArray[i];

                    maxIndex = i;

                }

            }

            return maxVal;

        }

 

        static void Main(string[] args)

        {

            int[] myArray = { 1,8,3,6,2,5,9,3,0,2};

            int maxIndex;

            Console.WriteLine("The maximum value in myArray is {0}",MaxValue(myArray,out maxIndex));

            Console.WriteLine("The first occurrence of this value is at element {0}",maxIndex +1);

           

        }

 

注意:在函数调用时,传参可以带值也可以不带值,要这一点与ref不同。如上面的out maxIndex就不带值,如果带值传递时,存储在该变量中的值会在函数执行时丢失。

6.2 变量的作用域

   1,全局变量一定要使用关键字static或者const来声明。

   2,若全局变量与局部变量同名,一定要使用《命名空间》.变量名

      Pagram.Mystring;

数据交换可以使用带参的函数,或者使用全局变量

输出同时带有 字符串和数字 可使用一下句子:

   String text = “Line” + Convert.Tostring(i);

   同时要注意:

     for(int i;int<10;i++)

    {

    }

其中的变量i的作用域只能在for循环里面,同样也可适用于while语句

6.3main函数

 ①四种签名

(1)       static void Mian()

(2)       static void Mian(string[] args)

(3)       static int Mian()

(4)       static int Mian(string[] args)

            其中args是命令行参数

 

   关于如何使用请看下面的例子:

    输入代码:

 

            Console.WriteLine("{0} command line arguments were specified:", args.Length);

            foreach (string arg in args)

          

                Console.WriteLine(arg);

            Console.ReadKey();

2在“解决方案资源管理器右击项目名称选择属性

3选择调试并输入字符串

 

6.4 结构函数

 可以添加函数

6.5 函数重载

   Static void showdouble(ref int val)

Static void showdouble( int val)

以上这两个函数重载取决于调用函数中的参数形式如:showdoubleref val)就调用第一个,否则调用第二个。

6.6委托:

 可以简单的认为其参数就是函数名:

 请见代码:

#region Using directives

 

using System;

using System.Collections.Generic;

using System.Text;

 

#endregion

 

namespace Ch06Ex05

{

   class Program

   {

      delegate double ProcessDelegate(double param1, double param2);

 

      static double Multiply(double param1, double param2)

      {

         return param1 * param2;

      }

 

      static double Divide(double param1, double param2)

      {

         return param1 / param2;

      }

 

      static void Main(string[] args)

      {

         ProcessDelegate process;

         Console.WriteLine("Enter 2 numbers separated with a comma:");

         string input = Console.ReadLine();

         int commaPos = input.IndexOf(',');

         double param1 = Convert.ToDouble(input.Substring(0, commaPos));

         double param2 = Convert.ToDouble(input.Substring(commaPos + 1,

                                                 input.Length - commaPos - 1));

         Console.WriteLine("Enter M to multiply or D to divide:");

         input = Console.ReadLine();

         if (input == "M")

            process = new ProcessDelegate(Multiply);

         else

            process = new ProcessDelegate(Divide);

         Console.WriteLine("Result: {0}", process(param1, param2));

         Console.ReadKey();

      }

   }

}

        

运行结果   

 

 

 

 

posted on 2009-10-11 22:01  wtq  阅读(486)  评论(1编辑  收藏  举报