1、
我们在Main()函数中,调用Test()函数,我们管Main()函数称之为调用者,
管Test()函数称之为被调用者。
如果被调用者想要得到调用者的值:
1)、传递参数。
2)、使用静态字段来模拟全局变量。
如果调用者想要得到被调用者的值:
1)、返回值
2、
不管是实参还是形参,都是在内存中开辟了空间的。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Demo5
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入yes或者no");
string str = Console.ReadLine();
string input = IsYseOrNo(str);
Console.WriteLine(input);
Console.ReadKey();
}
///
/// 限定用户只能输入yes或者no,然后返回用户输入
///
///
/// 返回yes或者no
public static string IsYseOrNo(String input)
{
while(true)
{
if(input == "yes" || input == "no" )
{
return input;
}
else
{
Console.WriteLine("只能输入yes和弄,请从新输入");
input = Console.ReadLine();
}
}
}
}
}
3、方法的功能一定要单一。
GetMax(int n1,int n2)
方法中最忌讳的就是出现提示用户输入的字眼。
4、out、ref、params
1)、out参数。
如果你在一个方法中,返回多个相同类型的值的时候,可以考虑返回一个数组。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 方法的参数out
{
class Program
{
static void Main(string[] args)
{
//写一个方法,求最大值,最小值,总和,平均值
//数组
int[] num = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int[] result = GetMaxMinSumAvg(num);
Console.WriteLine("最大值是{0},最小值是{1},总和是{2},平均值是{3}", result[0], result[1], result[2], result[3]);
Console.ReadKey();
}
public static int[] GetMaxMinSumAvg(int[] num)
{
int[] results = new int[4];
results[0] = num[0];
results[1] = num[0];
results[2] = 0;
for (int i = 0; i < num.Length; i++)
{
if(num[i]>results[0])
{
results[0] = num[i];
}
if(num[i]
out参数就侧重于在一个方法中可以返回多个不同类型的值。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 参数ref
{
class Program
{
static void Main(string[] args)
{
double salary = 5000;
JiangJin(ref salary);
Console.WriteLine(salary);
Console.ReadKey();
}
public static void JiangJin(ref double s)
{
s += 500;
}
public static void FaKuang(ref double s)
{
s -= 500;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 功能tryPause
{
class Program
{
static void Main(string[] args)
{
int num;
Console.WriteLine("请输入一个数字");
bool b = int.TryParse(Console.ReadLine(), out num);
Console.WriteLine(b);
Console.WriteLine(num);
Console.ReadKey();
}
public static bool MyTryParse(string s,out int result)
{
result = 0;
try
{
result = int.Parse(s);
return true;
}
catch
{
return false;
}
}
}
}
2)、ref参数
能够将一个变量带入一个方法中进行改变,改变完成后,再讲改变后的值带出方法。
ref参数要求在方法外必须为其赋值,而方法内可以不赋值。
3)、params可变参数
将实参列表中跟可变参数数组类型一致的元素都当做数组的元素去处理。
params可变参数必须是形参列表中的最后一个元素。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 函数
{
class Program
{
static void Main(string[] args)
{
int[] s = { 99, 98, 97 };
test("张三", 99, 98, 97);
Console.ReadKey();
}
public static void test(string name,params int[] score)
{
int sum = 0;
for (int i = 0; i < score.Length; i++)
{
sum += score[i];
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 参数param
{
class Program
{
static void Main(string[] args)
{
}
public static void test(string name,params int[] score,int id)
{
}
}
}
5、方法的重载
概念:方法的重载指的就是方法的名称相同给,但是参数不同。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 重载
{
class Program
{
static void Main(string[] args)
{
M(2, 3);
M(2, 3, 4);
M(2.1, 3.2);
M("123", "234");
}
//重载
//重载的好处:可以传入不同的参数
public static void M(int n1,int n2)
{
int result = n1 + n2;
}
public static double M(double n1, double n2)
{
return n1 + n2;
}
public static void M(int n1, int n2, int n3)
{
int result = n1 + n2 + n3;
}
public static string M(string s1, string s2)
{
return s1 + s2;
}
}
}
6、方法的递归
方法自己调用自己。
找出一个文件夹中所有的文件。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 递归
{
class Program
{
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)
{
TellStory(i);
}
}
}
}