例子是轉自別人.
class one
{
{
public void F() { Console.WriteLine("one.F"); }//非虛方法
public virtual void G() { Console.WriteLine("one.G"); }//虛方法
}
class two : one
{
{
public new void F() { Console.WriteLine("two.F"); }//方法隱藏
public override void G() { Console.WriteLine("two.G"); }//方法覆蓋
}
class Test
{
static void Main()
{
two b = new two();
one a = b;
a.F();
b.F();
a.G();
b.G();
Console.ReadLine();
}
}
{
static void Main()
{
two b = new two();
one a = b;
a.F();
b.F();
a.G();
b.G();
Console.ReadLine();
}
}
輸出如圖:
多態性:包括編譯時多態性和運行時多態性.
編譯時多態性體現在重載上,包括方法重載和操作符重載。
運行時多態表現爲虛成員virtual與接口interface 。
編譯時多態性體現在重載上,包括方法重載和操作符重載。
運行時多態表現爲虛成員virtual與接口interface 。
函數多態的體現:重載(overload)、覆蓋(override)、隱藏(hide):
隱藏:通過基類的引用訪問該方法時,訪問的仍是基類的函數,子類對象訪問的是子類的函數。
隱藏:通過基類的引用訪問該方法時,訪問的仍是基類的函數,子類對象訪問的是子類的函數。