一、咱們在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();
}
}
}