一、复习
函数(方法)是重复调用一堆代码,减少代码使用量
二、方法的调用
Main函数中的调用
在Main()函数中调用Test()函数,称Main()函数为调用者,称Tese()函数为被调用者
如果被调用着想要得到调用者值:T得到M
传递参数
在函数的参数中直接传递
使用静态字段模拟全局字段
在类后插入静态字段模拟全局变量
错误:并非所有的代码路径都有返回值——缺少return
方法的功能要单一
调用者得到被调用者的值:M得到T
return 返回值
static void Main(string[] args)
{
int n = 10;
int m = Test(n);
Console.WriteLine(m);
}
public static int Test(int n)
{
n = n + 6;
return (n);
}
练习
static void Main(string[] args)
{
//写一个方法是不是闰年
bool isrun = IsRun(1982);
Console.WriteLine(isrun);
}
/// <summary>
/// 判断输入的年份是否为闰年
/// </summary>
/// <param name="year">要判断的年份</param>
/// <returns>是否闰年</returns>
public static bool IsRun (int year )
{
bool b =(year % 4 == 0 )||(year % 400 == 0 && year % 100 != 0);
return b;
}
三、out参数的使用
方法中返回一个类型的值,可以考虑返回一个数组
方法中返回多个类型的值,考虑使用out参数:即可返回一个类型,也可返回多个和类型
使用out参数必须在方法结束前对参数进行赋值;调用out方法的函数中对于多余返回的值无需赋值
static void Main(string[] args)
{
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, };
Test(numbers, out int max,out int min ,out int sum,out int avg,out string b,out bool c);
Console.WriteLine("最大值是{0},最小值是{1},平均值是{2},总和是{3}字符串是{4},bool类型是{5}",max,min,sum,avg,b,c);
}
public static void Test(int[] nums,out int max, out int min,out int sum,out int avg,out string a,out bool b)
{
max = 0;
min = 0;
sum = 0;
avg = 0;
a = "123";
b = true;
for (int i = 0; i < nums.Length; i++)
{
if (max < nums[i])
{
max = nums[i];
}
if(min > nums[i])
{
min = nums[i];
}
sum += nums[i];
}
avg = sum / nums.Length;
}
static void Main(string[] args)
{
{
Console.WriteLine("请输入用户名");
string name = Console.ReadLine();
Console.WriteLine("请输入密码");
string psd = Console.ReadLine();
string mas;
bool b = IsTrue(name, psd, out mas);
Console.WriteLine("登陆状态:{0}", b);
Console.WriteLine("登录信息:{0}", mas);
}
}
public static bool IsTrue(string name, string psd, out string mas)
{
if (name == "admin" && psd == "123456")
{
mas = "输入正确";
return true;
}
else if (name == "admin")
{
mas = "密码错误";
return false;
}
else if (psd == "123456")
{
mas = "用户名错误";
return false;
}
else
{
mas = "未知错误";
return false;
}
}
四、ref参数
能够将一个变量带入一个方法中改变,改变完成后,在将改变的值书输出带回方法
区别于 out:
在方法外必须赋值,方法内可以不赋值
static void Main(string[] args)
{
double salary = 5000;
JiaXin (ref salary);
Console.WriteLine(salary);
Console.ReadKey();
}
/// <summary>
/// 计算减薪后的薪水
/// </summary>
/// <param name="s">传入原薪水</param>
public static void JiaXin ( ref double s)
{
s += 500;
}
static void Main(string[] args)
{
//使用方法交换两个类型的变量
int n1 = 11;
int n2 = 22;
Test(ref n1, ref n2);
Console.WriteLine("{0}和{1}",n1,n2);
}
public static void Test (ref int n1, ref int n2)
{
int temp = n1;
n1 = n2;
n2 = temp;
}
五、params可变参数
将实参列表中跟可变参数数组类型一致的元素都当作数组的元素去处理
必须是形参列表中的最后一个元素
static void Main(string[] args)
{
Test("张三", 1008, 100, 100, 100);
}
public static void Test(string name, int id ,params int[] sore)
{
int sum = 0;
for (int i = 0; i < sore.Length; i++)
{
sum += sore[i];
}
Console.WriteLine("{0},学号{1}总成绩是{2}", name,id, sum);
}
static void Main(string[] args)
{
//求任意长度数组的和:整数类型
int sum = GetSum(12, 28);
Console.WriteLine(sum);
}
public static int GetSum ( params int [] nums )
{
int sum = 0;
for (int i = 0; i < nums.Length; i++)
{
sum += nums[i];
}
return sum;
}
六、方法
重载
概念:方法的名称相同,参数不同;与返回值无关
参数不同的两种情况:
1、参数个数相同,类型不同
2、参数类型相同,个数不同
static void Main(string[] args)
{
}
public static void M(int n1,int n2)
{
int sum = n1 + n2;
}
public static double M(double n1, double n2)
{
double sum = n1 + n2;
return sum;
}
递归
概念:方法自己调用自己
static void Main(string[] args)
{
Tell();
}
public static int i = 0;
public static void Tell ()
{
Console.WriteLine("1");
Console.WriteLine("2");
Console.WriteLine("3");
if(i>10)
{
return;
}
i++;
Tell();
}