.NET 基礎 一步步 一幕幕[面向對象之方法、方法的重載、方法的重寫、方法的遞歸]

方法、方法的重載、方法的重寫、方法的遞歸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 (加羣備註:博客園看到的)

相關文章
相關標籤/搜索