1.
父類:public virtual string ToString(){return "a";}
子類:public override string ToString(){return "b";}
2.
同一類中或父子關系類中皆可:
public string ToString(){return "a";}
public string ToString(int id){return id.ToString();}
override是用於重寫基類的虛方法,這樣在派生類中提供一個新的方法
重載是提供了一種機制, 相同函數名通過不同的返回值類型以及參數來表來區分的機制
1. override
-----------
使用 override 修飾符來修改方法、屬性、索引器或事件。重寫方法提供從基類繼承的成員的新實現。由重寫聲明重寫的方法稱為重寫基方法。重寫基方法必須與重寫方法具有相同的簽名。
不能重寫非虛方法或靜態方法。重寫基方法必須是虛擬的、抽象的或重寫的。
也就是說,用 override 修飾符重寫的基類中的方法必須是 virtual, abstract 或 override 方法。
2. 重載
-------
當類包含兩個名稱相同但簽名不同的方法時發生方法重載。
使用重載方法的指南:
a. 用方法重載來提供在語義上完成相同功能的不同方法。
b. 使用方法重載而不是允許默認參數。默認參數的版本控制性能不好,因此公共語言規范(CLS)中不允許使用默認參數。
c. 正確使用默認值。在一個重載方法系列中,復雜方法應當使用參數名來指示從簡單方法中假定的默認狀態發生的更改。
d. 對方法參數使用一致的排序和命名模式。提供一組重載方法,這組重載方法帶有遞增數目的參數,以使開發人員可以指定想要的級別的信息,這種情況很常見。您指定的參數越多,開發人員就可指定得越詳細。
e. 如果必須提供重寫方法的能力,請僅使最完整的重載是虛擬的並根據它來定義其他操作。
// 下面具體解釋一下這種模式,只有最後一個方法(參數最完整的方法)是虛方法,在繼承了這個類的子類中只要重寫(override)這個方法就行了。
public class SampleClass
{
private string myString;
public SampleClass(string str)
{
this.myString = str;
}
public int IndexOf(string s)
{
return IndexOf (s, 0);
}
public int IndexOf(string s, int startIndex)
{
return IndexOf(s, startIndex, myString.Length - startIndex );
}
public virtual int IndexOf(string s, int startIndex, int count)
{
return myString.IndexOf(s, startIndex, count);
}
}