1. 程式人生 > >【設計模式】(三)-附錄A:方法過載

【設計模式】(三)-附錄A:方法過載

概念

方法過載是指在一個類中定義多個同名的方法,但要求每個具有不同的引數或引數的個數。
我們可以理解為方法過載可在不改變原方法的基礎上,新增功能。方法過載算是提供了函式可擴充套件的能力。

注意事項

1.並不是只有構造方法可以過載,普通方法也是可以過載的。
2.方法過載時,兩個方法必須要方法名相同,但引數型別或個數必須要有所不同。
3.和返回值沒有關係,和引數的個數和型別有關。

好處

1.對多個屬性進行賦值時,不需要重複的寫例項名。
2.可以保證使用者在new一個物件時,必須對某一個屬性進行賦值。

構造方法過載

比如說一隻貓在出生的時候,就給這隻貓起好名字了,定義一個Cat類的構造方法,返回一個字串就好了,程式碼如下:

public class Cat
    {
 private string name = "";
        public Cat(string name)
        {
            this.name = name;
        }
        public string Shout()
        {
            return "我的名字叫" + name + " 喵";
        }
      }

客戶端程式碼:

        private void button1_Click(object sender, EventArgs e)
        {
            Cat cat = new Cat("咪咪");
          
            MessageBox.Show(cat.Shout());
         
        }

最後顯示結果:
在這裡插入圖片描述

這是剛出生有名字的貓,那如果剛出生沒有起好名字的該怎麼辦呢?貓也得分個公母吧,這時候就要用到方法過載了。

public class Cat
    {
        private string name = "";
        private char gender = ' ';
        public Cat(string name)
        {
            this.name = name;
        }
        public Cat()
        {
            this.name = "";
        }
       public Cat(char gender)
        {
            this.gender = gender;
        }
        
        public string Shout()
        {
            return "我的名字叫" + name + " 喵";
        }
      public string Shout1()
        {
            return "我沒有名字" + name + " 喵";
        }
        public string Shout2()
        {
            return "我是" + gender +"貓" + " 喵";
        }

客戶端程式碼:

 public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Cat cat = new Cat("咪咪");
          
            MessageBox.Show(cat.Shout());
         
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Cat cat1 = new Cat();
            MessageBox.Show(cat1.Shout1());
        }

        private void button3_Click(object sender, EventArgs e)
        {
            Cat cat2 = new Cat('公');
            MessageBox.Show(cat2.Shout2());
        }

最後顯示結果:
在這裡插入圖片描述
在這裡插入圖片描述

普通方法過載

計算兩個數的和,要考慮兩個都是整數型別的,還有一個整數一個小數型別的,還考慮兩個都是小數型別的。
1.不使用方法過載:

 static void Main(string[] args)
        {
            Console.WriteLine(AddNumber1(2,6));
            Console.WriteLine(AddNumber2(1, 2));
            Console.WriteLine(AddNumber3(3, 2.2));
            Console.ReadKey();
        }
        public static int AddNumber1(int num1,int num2)
        {
            return num1 + num2;
        }
        public static double AddNumber2(int num1, double num2)
        {
            return num1 + num2;
        }
        public static double AddNumber3(double num1,double num2)
        {
            return num1 + num2;
        }

不用方法過載,每次都要重新定義一個函式名,然後作用是一樣的,造成了“資源浪費”,使用方法過載就可以用相同的函式名,去完成這些功能。

2.使用方法過載:

 static void Main(string[] args)
        {
            Console.WriteLine(AddNumber(2,6));
            //Console.WriteLine(AddNumber2(1, 2));
            //Console.WriteLine(AddNumber3(3, 2.2));
            Console.ReadKey();
        }
        public static int AddNumber(int num1,int num2)
        {
            return num1 + num2;
        }
        public static double AddNumber(int num1, double num2)
        {
            return num1 + num2;
        }
        public static double AddNumber(double num1,double num2)
        {
            return num1 + num2;
        }

總結

方法過載用的地方還是挺多的,多加練習,就能掌握了。