【設計模式】(三)-附錄A:方法過載
阿新 • • 發佈:2018-12-10
概念
方法過載是指在一個類中定義多個同名的方法,但要求每個具有不同的引數或引數的個數。
我們可以理解為方法過載可在不改變原方法的基礎上,新增功能。方法過載算是提供了函式可擴充套件的能力。
注意事項
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;
}
總結
方法過載用的地方還是挺多的,多加練習,就能掌握了。