方法、方法的重載、方法的重寫、方法的遞歸ide
方法:函數
將一堆代碼進行重用的一種機制。spa
語法:3d
[訪問修飾符] 返回類型 <方法名>(參數列表){blog
方法主體;繼承
}遞歸
返回值類型:若是不須要寫返回值,返回類型寫void。input
[訪問修飾符] void <方法名>(){博客
方法主體;string
}
若是須要寫返回值,返回類型寫須要返回的類型:
例如返回string類型:
[訪問修飾符] string <方法名>(){
方法主體;
}
方法名:Pascal 每一個單詞的首字母都大些。其他字母小寫
參數列表:完成這個方法所必需要提供給這個方法的條件。若是沒有參數,小括號也不省略。
方法寫好後,若是想要被執行,必需要調用。
方法的調用語法:類名.方法名(參數);
代碼展現:
static void Main(string[] args) { //計算兩個整數之間的最大值 //調用有返回值的方法 int max = Program.GetMax(66, 88); //調用沒有有返回值的方法 Write(); Console.WriteLine(max); Console.ReadKey(); } /// <summary> /// 計算兩個整數之間的最大值而且將最大值返回 /// </summary> /// <param name="n1">第一個整數</param> /// <param name="n2">第二個整數</param> /// <returns>將最大值返回</returns> public static int GetMax(int n1, int n2) { return n1 > n2 ? n1 : n2; } /// <summary> /// 沒有返回值的方法 /// </summary> public static void Write() { Console.WriteLine("計算結束。。。"); }
運行結果:
方法的練習:
static void Main(string[] args) { //讀取輸入的整數 //屢次調用(若是用戶輸入的是數字,則返回,不然提示用戶從新輸入) Console.WriteLine("請輸入一個數字"); string input = Console.ReadLine(); int number = GetNumber(input); Console.WriteLine(number); Console.ReadKey(); } /// <summary> /// 這個方法須要判斷用戶的輸入是不是數字 /// 若是是數字,則返回 /// 若是不是數字,提示用戶從新輸入 /// </summary> public static int GetNumber(string s) { while (true) { try { int number = Convert.ToInt32(s); return number; } catch { Console.WriteLine("請從新輸入"); s = Console.ReadLine(); } } }
運行結果:
方法的重載
概念:方法的重載指的就是方法的名稱相同給,可是參數列表不一樣。
參數不一樣,分爲兩種狀況
1)、若是參數的個數相同,那麼參數的類型就不能相同。
2)、若是參數的類型相同,那麼參數的個數就不能相同。
***方法的重載跟返回值沒有關係
代碼展現:
static void Main(string[] args) { M(); M(1, 2); double b = M(0.1, 0.3); Console.WriteLine(b); M(1,2,3); string s = M("1", "2"); Console.WriteLine(s); //Console.WriteLine 也是方法的重載(能夠F12進方法看看) Console.WriteLine(1); Console.WriteLine(1.4); Console.WriteLine(true); Console.WriteLine('c'); Console.WriteLine("123"); Console.WriteLine(5000m); Console.ReadKey(); } public static void M() { Console.WriteLine("無參數的方法!!!"); } public static void M(int n1, int n2) { int result = n1 + n2; Console.WriteLine(result); } public static double M(double d1, double d2) { return d1 + d2; } public static void M(int n1, int n2, int n3) { int result = n1 + n2 + n3; Console.WriteLine(result); } public static string M(string s1, string s2) { return s1 + s2; }
運行結果:
Console.WriteLine 源代碼一部分(詳情F12進方法自行查看):
方法的重寫
「重寫」父類方法就是修改它的實現方式或者說在子類中對它進行從新編寫。
重寫必須發生在繼承基礎之上
一、重寫父類的方法要用到override關鍵字(具備override關鍵字修飾的方法是對父類中同名方法的新實現)
二、要重寫父類的方法,前提是父類中該要被重寫的方法必須聲明爲virtual或者是abstract類型。給父類中 要被重寫的方法添加virtual關鍵字表示能夠在子類中重寫它的實現。(注意:C#中的方法默認並非virtual類型的,所以要添加virtual關鍵字纔可以被重寫)
三、virtual關鍵字用於將方法定義爲支持多態,有virtual關鍵字修飾的方法稱爲「虛擬方法」
[訪問修飾符] virtual [返回類型] 方法名(參數列表)
{
//虛擬方法的實現,該方法能夠被子類重寫
}
代碼展現:
namespace inheritDemo2 { class Employee { public virtual void EmpInfo() { Console.WriteLine("用virtual關鍵字修飾的方法是虛擬方法"); } } class DervEmployee : Employee { public override void EmpInfo() { base.EmpInfo();//base關鍵字將在下面拓展中提到 Console.WriteLine("該方法重寫base方法"); } } class Test { static void Main(string[] args) { DervEmployee objDervEmployee = new DervEmployee(); objDervEmployee.EmpInfo(); //注意:objDervEmployee派生類的實例是賦給Employee類的objEmployee的引用, // 因此objEmployee引用調用EmpInfo()方法時 仍是調用DervEmployee類的方法 Employee objEmployee = objDervEmployee; objEmployee.EmpInfo(); } } }
拓展:base關鍵字用於從子類中訪問父類成員。即便父類的方法在子類中重寫,仍能夠使用base關鍵字調用。 並且,在建立子類實例時,能夠使用base關鍵字調用父類的構造函數。使用base關鍵字只能訪問父類的構造.
方法的遞歸
方法本身調用本身。(注意:但是這個方法體裏面必須有一個條件,能夠使這個遞歸停下來的條件,要否則就成了死循環,出不了這個方法.)
代碼展現:
static void Main(string[] args) { TellStory(); Console.ReadKey(); } public static int i = 0; public static void TellStory() { Console.WriteLine("從前有座山"); Console.WriteLine("山裏有座廟"); Console.WriteLine("廟裏有個老和尚和小和尚"); Console.WriteLine("有一天,小和尚哭了,老和尚給小和尚講了一個故事"); i++; if (i >= 10) { return; } TellStory(); }
運行結果:
總結:
方法:將一堆代碼進行重用的一種機制。
方法的重載:方法的重載指的就是方法的名稱相同給,可是參數列表不一樣。
方法的重寫: 「重寫」父類方法就是修改它的實現方式或者說在子類中對它進行從新編寫。
方法的遞歸:方法本身調用本身。
本篇就到這裏了,最後打個小廣告:QQ羣: .NET 一步步一幕幕 羣號:590170361 (加羣備註:博客園看到的)