虛方法(virtual)
Virtual 關鍵字用于修飾方法、屬性、索引器或事件聲明,并且允許在派生類中重寫這些對象。
看一段代碼:
using System ;
class A
{
public void F()
{
Console.WriteLine ("A.F");
}
}
class B:A
{
public new void F()//注意new關鍵字
{
Console.WriteLine ("B.F");
}
}
class Test
{
static void Main()
{
B b = new B ();
A a = b;
a.F ();
b.F();
}
}
輸出: A.F
B.F
上述代碼在內(nèi)存中如下圖:

再看一段代碼:
using System ;
class A
{
public virtual void F()
{
Console.WriteLine ("A.F");
}
}
class B:A
{
public overridevoid F()
{
Console.WriteLine ("B.F");
}
}
class C:B
{
public new void F()
{
Console.WriteLine ("C.F");
}
}
class Test
{
static void Main()
{
C c = new C ();
A a = c;
a.F();
}
}
輸出: B.F
->基類的成員會搜索繼承鏈,找到使用了new修飾符的那個成員之前的成員,然后調(diào)用該成員。
多態(tài)(polymorphism):
多態(tài)是指兩個或多個屬于不同類的對象,對同一個消息做出不同響應的能力。
->virtual 和 override 關鍵字 : 多態(tài)給子類提供了一種方式,可以自定義如何實現(xiàn)基類所定義的方法;
看下面代碼:
using System ;
class Employee
{
PRotected string _name;
public Employee () {}
public Employee (string name)
{
_name = name ;
}
public virtual void StartWork()
{
Console.WriteLine (_name+"開如工作");
}
}
class Manager:Employee
{
public Manager (string name):base (name){}
public override void StartWork()
{
base .StartWork ();//注意base的使用
Console .WriteLine ("下達任務");
}
}
class Seller:Employee
{
public Seller (string name):base (name){}
public override void StartWork()
{
base .StartWork ();
Console .WriteLine ("銷售產(chǎn)品");
}
}
class Test
{
static void Main()
{
Employee [] emp = new Employee[2] ;
emp [0]=new Manager ("張三");
emp [1]=new Seller ("李四");
foreach (Employee e in emp )
{
e.StartWork ();
}
}
}
新聞熱點
疑難解答