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;
}
}
}
{
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
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