C#中隱藏(new)和方法過載(overide)的區別
子類B繼承A,也宣告一個方法a(){}
如果B裡面的a()使用override,那麼訪問A的方法時實際上呼叫了B裡面宣告的方法,相當於A的方法被覆蓋了,new就不是,訪問A的a還是A裡面定義的方法,訪問B就是B裡面定義的方法. 說白了:new是覆蓋,override是過載,“覆蓋”並不意味著“刪除”,但“過載”意味著“刪除”,這就是“覆蓋”和“過載”的區別 隱藏(new)示例: using System;
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 重寫virtual(虛方法)示例
using System;
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