一天一小步_我学C#入门精典_第十天

1.函数的重载

函数的重载指需要让多个函数操作不同类型的变量.函数重载允许创建同名的多个函数.这些函数可使用不同的参数类型.

示例:

class Program

{

static void Main(string[] args)

{

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

int maxVal = MaxValue(myArray);

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

Console.ReadKey();

}

/// <summary>

/// 求一个int型数组中的最大值

/// </summary>

/// <param name="intArray">int型数组</param>

/// <returns>返回数组中的最大值</returns>

static int MaxValue(int[] intArray)

{

int maxVal = intArray[0];

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

{

if (intArray[i] > maaxVal)

{

maxVal = intArray[i];

}

return maxVal;

}

}

/// <summary>

/// 求一个double数组中的最大值

/// </summary>

/// <param name="doubleArray">double型数组</param>

/// <returns>返回数组中的最大值</returns>

static double MaxValue(double[] doubleArray)

{

double maxVal = doubleArray[0];

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

{

if(doubleArray[i] >maxVal)

{

maxVal = doubleArray[i];

}

returrn maxVal;

}

}

}

*根据传进的参数类型来确定调用的函数.如果参数为int型数组,则调用static int MaxValue(int[] intArray),如果参数为double型则调用static double MaxValue(double[] doubleArray)

2.委托

委托是一种可以把引用存储为函数的类型. 委托的声明非常类似于函数,但不带函数体,且要使用delegate关键字.委托的声明指定了一个函数签名,其中包含一个返回类型和参数列表.

示例:

#region test17 委托的使用

public void test17()

{

//声明委托的一个变量

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));

relocal:

Console.WriteLine("Enter M to multiply or D to divide: ");//输入M则进行乘法运算,输入D则进行除法运算.

input = Console.ReadLine();

if (input.ToUpper() == "M")

{

process = new ProcessDelegate(Multiply);

}

else if (input.ToUpper() == "D")

{

process = new ProcessDelegate(Divide);

}

else

{

//如果输入的不是M或D则重新输入,goto语句尽量还是少用吧.

goto relocal;

}

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

Console.ReadKey();

}

/// <summary>

/// 委托名:ProcessDelegate

/// 其签名与Multiply和Divide两个函数的签名相匹配

/// </summary>

/// <param name="param1">参数1</param>

/// <param name="param2">参数2</param>

/// <returns></returns>

delegate double ProcessDelegate(double param1, double param2);

/// <summary>

/// 方法名:Multiply

/// 功 能:实现乘法运算

/// </summary>

/// <param name="param1">乘数1</param>

/// <param name="param2">乘数2</param>

/// <returns>返回乘积</returns>

static double Multiply(double param1, double param2)

{

return param1 * param2;

}

/// <summary>

/// 方法名:Divide

/// 功 能:实现除法运算

/// </summary>

/// <param name="param1">被除数</param>

/// <param name="param2">除数</param>

/// <returns>返回运算的商</returns>

static double Divide(double param1, double param2)

{

return param1 / param2;

}

#endregion