5 .Net学习第五天
5.1 方法(函数)
方法是将一堆代码进行重用的一种机制,函数就是一段代码,这段代码可能有输入的值(参数),有可能有返回值,方法使用过程中需要的数据就是参数,返回的执行结果就是返回值
自定义方法实例,求两个整数中的最大值
/// <summary>
/// 对比两个整数并返回最大值
/// </summary>
/// <param name="n1">参数1</param>
/// <param name="n2">参数2</param>
/// <returns>参数1和参数2中的最大值</returns>
public static int GetMax(int n1, int n2)
{
return n1 > n2 ? n1 : n2;
}
在上述函数中,int表示其返回值为整型,GetMax为方法名,n1、n2为参数
return n1 > n2 ? n1 : n2;是该方法的方法体
调用上述方法的语法如下
int n = GetMax(10, 9);
当该方法与main方法在同一类时,可以省略类名,当不在同一类下时,必须加上类名
5.2 out、ref、params参数的使用
out参数用于传递参数回调用方法处,在方法内必须对out参数赋值
/// <summary>
/// 登录返回登录结果和登录信息
/// </summary>
/// <param name="user">用户名</param>
/// <param name="pwd">密码</param>
/// <param name="loginInf">登录信息</param>
/// <returns>登录结果</returns>
public static bool LoginInf(string user, string pwd, out string loginInf)
{
if(user == "admin" && pwd == "888888")
{
loginInf = "登录成功";
return true;
}
else if(user == "admin")
{
loginInf = "密码错误";
return false;
}
else if (pwd == "888888")
{
loginInf = "用户名错误";
return false;
}
else
{
loginInf = "用户名与密码均错误";
return false;
}
}
ref参数用于将参数传递给方法,在方法中改变该变量的值,必须在方法外对ref参数赋值
/// <summary>
/// 将传入参数增加10
/// </summary>
/// <param name="n">需要增加的值</param>
public static void AddTen(ref int n)
{
n += 10;
}
params参数用于将实参列表中和可变参数数组类型一致的元素当作数组的元素处理
static void Main(string[] args)
{
int max = 0;
max = GetMax(1, 8, 5, 3, 4, 7, 6);//传入参数被视为一个数组
}
/// <summary>
/// 返回任意长度数组中的最大值
/// </summary>
/// <param name="nums">输入数组</param>
/// <returns>数组中的最大值</returns>
public static int GetMax(params int[] nums)
{
int max = nums[0];
for (int i = 0; i < nums.Length; i++)
{
if (max < nums[i])
{
max = nums[i];
}
}
return max;
}
5.3 方法的重载
方法的重载主要是为了能在方法传入不同类型或不同数量的参数时,进行不同的处理
public int Add(int n1, int n2);
{
return n1 + n2;
}
public double Add(double n1, double n2)
{
return n1 + n2;
}
public int Add(int n1, int n2, int n3)
{
return n1 + n2 + n3;
}
方法重载过程中
- 如果参数个数相同,那么参数的类型必须不同
- 如果参数类型相同,那么参数的个数必须不同
5.4 方法的递归
方法自己调用自己
static void Main(string[] args)
{
TellStory(0);
Console.ReadKey();
}
public static void TellStory(int i)
{
Console.WriteLine("从前有座山");
Console.WriteLine("山里有座庙");
Console.WriteLine("庙里有老和尚和小和尚");
Console.WriteLine("老和尚给小和尚讲故事");
i++;
if (i >= 10)
{
return;
}
TellStory(i);
}
5.5 方法的简单使用实例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Test15
{
class Program
{
/// <summary>
/// 主方法,获取用户输入的两个整数并求两数字间所有整数的和
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
Console.WriteLine("请输入第一个数字");
int num1 = GetNum();
Console.WriteLine("请输入第二个数字");
int num2 = GetNum();
NumSort(ref num1, ref num2);
int[] nums = GetArray(num1, num2);
int sum = GetSum(nums);
Console.WriteLine("两数字间的所有数字的和是{0}", sum);
Console.ReadKey();
}
/// <summary>
/// 获取输入的数字
/// </summary>
/// <returns></returns>
public static int GetNum()
{
int num = 0;
while (true)
{
try
{
num = Convert.ToInt32(Console.ReadLine());
break;
}
catch
{
Console.WriteLine("输入错误,请重新输入");
}
}
return num;
}
/// <summary>
/// 当用户输入的第二个数比第一个数小时,交换两者的位置
/// </summary>
/// <param name="n1">用户输入的第一个数</param>
/// <param name="n2">用户输入的第二个数</param>
public static void NumSort(ref int n1, ref int n2)
{
if (n1 > n2)
{
n1 = n1 - n2;
n2 = n1 + n2;
n1 = n2 - n1;
}
}
/// <summary>
/// 将两个数之间所有的数存放到一个数组当中
/// </summary>
/// <param name="n1">数组的左边界</param>
/// <param name="n2">数组的右边界</param>
/// <returns>两个数间所有数组成的数组</returns>
public static int[] GetArray(int n1, int n2)
{
int[] nums = new int[n2 - n1 + 1];
for (int i = 0; i <= n2 - n1; i++)
{
nums[i] = n1 + i;
}
return nums;
}
/// <summary>
/// 对数组间的所有元素求和
/// </summary>
/// <param name="nums">输入的数组</param>
/// <returns>数组内的所有元素的和</returns>
public static int GetSum(int[] nums)
{
int sum = 0;
for (int i = 0; i < nums.Length; i++)
{
sum += nums[i];
}
return sum;
}
}
}