一、咱们在Main()函数中,调用Test()函数,咱们管Main()函数称之为调用者,
管Test()函数称之为被调用者。
若是被调用者想要获得调用者的值:
1)、传递参数。
2)、使用静态字段来模拟全局变量。
若是调用者想要获得被调用者的值:
1)、返回值数组
C#没有全局变量,用static实现(类做用域)。函数
二、
无论是实参仍是形参,都是在内存中开辟了空间的。spa
三、方法的功能必定要单一。
GetMax(int n1,int n2)
方法中最忌讳的就是出现提示用户输入的字眼。blog
四、out、ref、params
1)、out参数。
若是你在一个方法中,返回多个相同类型的值的时候,能够考虑返回一个数组。
可是,若是返回多个不一样类型的值的时候,返回数组就不行了,那么这个时候,
咱们能够考虑使用out参数。out参数就侧重于在一个方法中能够返回多个不一样类型的值。
注释:这个返回并非return返回的,而是经过参数带出来的。
好比登录:返回登录结果(成功或者失败)和登陆信息(用户名或者密码错误)。
msg在方法外就是个普通的String,不须要初始化。递归
/// <summary>
/// 判断登录是否成功
/// </summary>
/// <param name="name">用户名</param>
/// <param name="pwd">密码</param>
/// <param name="msg">多余返回的登录信息</param>
/// <returns>返回登录结果</returns>
public static bool IsLogin(string name, string pwd, out string msg)
{
if (name == "admin" && pwd == "888888")
{
msg = "登录成功";
return true;
}
else if (name == "admin")
{
msg = "密码错误";
return false;
}
else if (pwd == "888888")
{
msg = "用户名错误";
return false;
}
else
{
msg = "未知错误";
return false;
}
}
有同窗提到能够用结构体返回..........感受是对的内存
2)、ref参数
可以将一个变量带入一个方法中进行改变,改变完成后,再讲改变后的值带出方法。
ref参数要求在方法外必须为其赋值,而方法内能够不赋值。
注释:感受像C语言中的值传递。只不过不要返回值,经过ref直接改变了。作用域
好比:交换变量,(不用相似址传递的方法)string
3)、params可变参数
将实参列表中跟可变参数数组类型一致的元素都当作数组的元素去处理。
params可变参数必须是形参列表中的最后一个元素。
注释:最后一个,不然不知道可变参后边的元素是不是可变参内容;不能有多个可变参,那样不是最后的可变参就不符合语法。it
五、方法的重载
概念:方法的重载指的就是方法的名称相同给,可是参数不一样。
参数不一样,分为两种状况
1)、若是参数的个数相同,那么参数的类型就不能相同。
2)、若是参数的类型相同,那么参数的个数就不能相同。
***方法的重载跟返回值没有关系。io
六、方法的递归
方法本身调用本身。
找出一个文件夹中全部的文件。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _14_方法的递归
{
class Program
{
static void Main(string[] args)
{
TellStory();
Console.ReadKey();
}
public static int i = 0;
public static void TellStory()
{
//int i = 0;写这个的话 死循环
Console.WriteLine("从前有座山");
Console.WriteLine("山里有座庙");
Console.WriteLine("庙里有个老和尚和小和尚");
Console.WriteLine("有一天,小和尚哭了,老和尚给小和尚讲了一个故事");
i++;
if (i >= 10)
{
//break是跳出本次循环
return;
}
//TellStory(0);和第一行写int i=0一个效果
TellStory();
}
}
}