我们在Main()函数中,调用Test()函数,我们把Main()函数称之为调用者,把
Test()函数称之为被调用者。
如果被调用者想要得到调用者的值:
1)、传递参数。
2)、使用静态字段来模拟全局变量。
如果调用者想要得到被调用者的值:
1)、返回值
- 不管是实参还是形参,都是在内存中开辟了空间的。
- 方法的功能一定要单一
- 方法中最忌讳的就是出现提示用户输入的字眼。
实例:计算闰年
static void Main(string[] args)
{
bool a = IsRun(2020);
Console.WriteLine(a);
Console.ReadKey();
}
/// <summary>
/// 计算闰年方法
/// </summary>
/// <param name="year">输入年份</param>
/// <returns>是否是闰年</returns>
public static bool IsRun(int year)
{
bool b = (year % 400 == 0) || (year % 4 == 0 && year % 100 == 0);
return b;
}
out、ref、params
- out参数。
如果你在一个方法中,返回多个相同类型的值的时候,可以考虑返回一个数组。
但是,如果返回多个不同类型的值的时候,返回数组就不行了,那么这个时候,
我们可以考虑使用out参数。
out参数就侧重于在一个方法中可以返回多个不同类型的值。
实例:
static void Main(string[] args)
{
int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int max, min, sum, avg;
bool b;
string str1;
Test(nums, out max, out min, out sum, out avg, out b, out str1);
Console.WriteLine("{0},{1},{2},{3},{4},{5}",max, min, sum, avg, b, str1);
Console.ReadKey();
}
public static void Test(int[] nums,out int max,out int min,out int sum,out int avg,out bool a,out string str)
{
max = nums[0];
min = nums[0];
sum = 0;
for (int i = 0; i < nums.Length; i++)
{
if (nums[i] > max)
{
max = nums[i];
}
if (nums[i] < min)
{
min = nums[i];
}
sum += nums[i];
}
avg = sum / nums.Length;
a = true;
str = "我是返回的";
}
- ref参数
能够将一个变量带入一个方法中进行改变,改变完成后,再讲改变后的值带出方法。
ref参数要求在方法外必须为其赋值,而方法内可以不赋值。
实例:
static void Main(string[] args)
{
int mySalary = 5000;
JiangJin(mySalary);//输出结果5000
int myJiangJin= JiangJin1(mySalary);//输出结果5500
JiangJin(ref mySalary);//输出结果5500
Console.WriteLine(mySalary);
}
public static void JiangJin(int salary)
{
salary += 500;
}
public static int JiangJin1(int salary)
{
salary += 500;
return salary;
}
public static void JiangJin(ref int salary)
{
salary += 500;
}
实例:交换两个变量的数值
static void Main(string[] args)
{
int a = 10, b = 20;
ChangeData(ref a, ref b);
Console.WriteLine("a={0},b={1}", a, b);//结果a=20,b=10
Console.ReadKey();
}
public static void ChangeData(ref int n1,ref int n2)
{
int temp = n2;
n2 = n1;
n1 = temp;
}
- params可变参数
将实参列表中跟可变参数数组类型一致的元素都当做数组的元素去处理。
params可变参数必须是形参列表中的最后一个元素,类型必须一致,并且只能出现一个。
static void Main(string[] args)
{
int[] score = { 100, 99, 89, 99 };
//一般方法
Total00("张三",score);
//使用params可变数组长度,不限制输入长度
Total01("张三", 100, 99, 89, 99);
}
public static void Total00(string name, int[] score)
{
int sum = 0;
for (int i = 0; i < score.Length; i++)
{
sum += score[i];
}
Console.WriteLine("{0}的总成绩是{1}", name,sum);
}
public static void Total01(string name,params int[] score)
{
int sum = 0;
for (int i = 0; i < score.Length; i++)
{
sum +=score[i];
}
Console.WriteLine("{0}的总成绩是{1}", name,sum);
}
- 方法的重载
概念: 方法的重载指的就是方法的名称相同给,但是参数不同。
参数不同,分为两种情况
- 如果参数的个数相同,那么参数的类型就不能相同。
- 如果参数的类型相同,那么参数的个数就不能相同。
方法的重载跟返回值没有关系。
实例:
static void Main(string[] args)
{
Total(1, 2);
Total(1, 2, 3);
Total(1, 2, 3, "haha");
}
public static void Total(int n1,int n2)
{
int sum = n1 + n2;
Console.WriteLine("{0}", sum);
}
public static void Total(int n1, int n2, int n3)
{
int sum = n1 + n2 + n3;
Console.WriteLine("{0}", sum);
}
public static void Total(int n1, int n2,int n3,string str)
{
int sum = n1 + n2+n3;
string name = str;
Console.WriteLine("{0},{1}", sum,name);
}
- 方法的递归
方法自己调用自己。
找出一个文件夹中所有的文件。