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)
以上这两个函数重载取决于调用函数中的参数形式如:showdouble(ref 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();
}
}
}
运行结果