虛方法與隱藏方法定義
重寫(虛方法):繼承時發(fā)生调鲸,在子類中重新定義父類中的方法奥洼,子類中的方法和父類的方法是一樣的 例如:基類方法聲明為virtual(虛方法),派生類中使用override申明此方法的重寫.
隱藏:基類方法不做申明(默認(rèn)為非虛方法)禾嫉,在派生類中使用new聲明此方法的隱藏。
重寫(virtaul)時,定義的變量為父類或子類, 賦值為子類時. 皆調(diào)用子類的重寫方法唉擂;(會從子類中查找有重寫則調(diào)用, 沒有則調(diào)用基類方法)
隱藏(new)時,定義的變量為父類則調(diào)用父類的方法(不管賦值是子類還是父類)檀葛,定義的變量為子類則調(diào)用子類的方法玩祟。(使用場景: 當(dāng)子類想取的一方法名稱與父類相同時, 可以使用. 子類的方法與父類的方法相對來說是沒有直接的關(guān)系(繼承,重寫==). )
重寫virtual(虛方法)示例 : (看方法后面的實例)
class A
{
public virtual void F()
{
Console.WriteLine("A.F");
}
}
class B: A
{
public override void F()
{
Console.WriteLine("B.F");
}
}
class Test
{
static void Main()
{
B b = new B();
b.F();
A a = b;
a.F();
}
}
輸出為 : B.F B.F
隱藏(new)示例:(看方法前面的聲明)
class A
{
public void F()
{
Console.WriteLine("A.F");
}
}
class B: A
{
new public void F()
{
Console.WriteLine("B.F");
}
}
class Test
{
static void Main(string[] args)
{
B b = new B();
b.F();
A a = b;
a.F();
}
}
輸出為 : B.F A.F