C#語法學習虛方法(virtual)
/*
* Created by SharpDevelop.
* User: Administrator
* Date: 2008/9/3
* Time: 上午 10:20
* 虛方法(virtual)
* virtual關鍵字用於修飾方法,屬性,索引器或是事件聲明
* 並且允許在派生類中重寫這些對像.
*
*
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
class A
{
public void F()
{
Console.WriteLine("A.F");
}
}
class B:A
{
public new void F()
{
Console.WriteLine("B.F");
}
}
class Test
{
static void Main()
{
B b=new B();//由於b繼承自A,所以在b內有兩個方法F
A a=b;//這里進行了一次隱式轉換,轉換成了A對像.
a.F();//a的指針是指向b對像中所包含的A.F()方法.
b.F();
}
}
* Created by SharpDevelop.
* User: Administrator
* Date: 2008/9/3
* Time: 上午 10:20
* 虛方法(virtual)
* virtual關鍵字用於修飾方法,屬性,索引器或是事件聲明
* 並且允許在派生類中重寫這些對像.
*
*
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
class A
{
public void F()
{
Console.WriteLine("A.F");
}
}
class B:A
{
public new void F()
{
Console.WriteLine("B.F");
}
}
class Test
{
static void Main()
{
B b=new B();//由於b繼承自A,所以在b內有兩個方法F
A a=b;//這里進行了一次隱式轉換,轉換成了A對像.
a.F();//a的指針是指向b對像中所包含的A.F()方法.
b.F();
}
}
/*
* Created by SharpDevelop.
* User: Administrator
* Date: 2008/9/3
* Time: 上午 10:20
* 虛方法(virtual)
* virtual關鍵字用於修飾方法,屬性,索引器或是事件聲明
* 並且允許在派生類中重寫這些對像.
*
*
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
class A
{
//virtual && override是成對出現的
//virtual定議一個虛方法
//override覆蓋一個虛方法
//這里就形成了面向對像的一個很重要的特性:多態
//多態是指兩個或是多個屬於不同類的對像
//對同一個消息做出不同的響應的能力
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繼承自A,所以在b內有兩個方法F
A a=b;//這里進行了一次隱式轉換,轉換成了A對像.
a.F();//此處因為使用了virtual,所以輸出結果也是為B.F;
b.F();
}
}
* Created by SharpDevelop.
* User: Administrator
* Date: 2008/9/3
* Time: 上午 10:20
* 虛方法(virtual)
* virtual關鍵字用於修飾方法,屬性,索引器或是事件聲明
* 並且允許在派生類中重寫這些對像.
*
*
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
class A
{
//virtual && override是成對出現的
//virtual定議一個虛方法
//override覆蓋一個虛方法
//這里就形成了面向對像的一個很重要的特性:多態
//多態是指兩個或是多個屬於不同類的對像
//對同一個消息做出不同的響應的能力
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繼承自A,所以在b內有兩個方法F
A a=b;//這里進行了一次隱式轉換,轉換成了A對像.
a.F();//此處因為使用了virtual,所以輸出結果也是為B.F;
b.F();
}
}
/*
* Created by SharpDevelop.
* User: Administrator
* Date: 2008/9/3
* Time: 上午 10:20
* 虛方法(virtual)
* virtual關鍵字用於修飾方法,屬性,索引器或是事件聲明
* 並且允許在派生類中重寫這些對像.
*
*
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
class A
{
//virtual && override是成對出現的
//virtual定議一個虛方法
//override覆蓋一個虛方法
//這里就形成了面向對像的一個很重要的特性:多態
//多態是指兩個或是多個屬於不同類的對像
//對同一個消息做出不同的響應的能力
public virtual void F()
{
Console.WriteLine("A.F");
}
}
class B:A
{
public override void F()
{
Console.WriteLine("B.F");
}
}
class C:B
{
public override void F()
{
Console.WriteLine("C.F");
}
}
class Test
{
static void Main()
{
C c=new C();
A a=c;
B b=c;
a.F();
b.F();
c.F();//類C此時覆蓋了A,B的f方法
}
}
* Created by SharpDevelop.
* User: Administrator
* Date: 2008/9/3
* Time: 上午 10:20
* 虛方法(virtual)
* virtual關鍵字用於修飾方法,屬性,索引器或是事件聲明
* 並且允許在派生類中重寫這些對像.
*
*
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
class A
{
//virtual && override是成對出現的
//virtual定議一個虛方法
//override覆蓋一個虛方法
//這里就形成了面向對像的一個很重要的特性:多態
//多態是指兩個或是多個屬於不同類的對像
//對同一個消息做出不同的響應的能力
public virtual void F()
{
Console.WriteLine("A.F");
}
}
class B:A
{
public override void F()
{
Console.WriteLine("B.F");
}
}
class C:B
{
public override void F()
{
Console.WriteLine("C.F");
}
}
class Test
{
static void Main()
{
C c=new C();
A a=c;
B b=c;
a.F();
b.F();
c.F();//類C此時覆蓋了A,B的f方法
}
}
/*
* Created by SharpDevelop.
* User: Administrator
* Date: 2008/9/3
* Time: 上午 10:41
* 通常情況下子類中都會調用父類的方法.
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
class Employee
{
protected string _name;
public Employee(){}
public Employee(string name)
{
this._name=name;
}
public virtual void StartWork()
{
Console.Write(this._name + "開始工作:");
}
}
class Manager : Employee
{
public Manager(string name):base(name){}
public override void StartWork()
{
base.StartWork();//在子類中調用父類的方法
Console.WriteLine("給員工下達任務");
}
}
class Secretary : Employee
{
public Secretary(string name):base(name){}
public override void StartWork()
{
base.StartWork();//在子類中調用父類的方法
Console.WriteLine("協助經理");
}
}
class Seller : Employee
{
public Seller(string name):base(name){}
public override void StartWork()
{
base.StartWork();//在子類中調用父類的方法
Console.WriteLine("銷售產品");
}
}
//新增員工時只需要再新增一個類繼承自Employee
class Accountant : Employee
{
public Accountant(string name):base(name){}
public override void StartWork()
{
base.StartWork();//在子類中調用父類的方法
Console.WriteLine("管理公司財政");
}
}
class Test
{
static void Main()
{
Employee[] emp=new Employee[5];
emp[0]=new Manager("經理張三");
emp[1]=new Secretary("助理李四");
emp[2]=new Seller("王五");
emp[3]=new Seller("馬六");
emp[4]=new Accountant("錢七");
Console.WriteLine("早上八點,開始工作.");
foreach(Employee e in emp)
{
e.StartWork();
}
}
}
* Created by SharpDevelop.
* User: Administrator
* Date: 2008/9/3
* Time: 上午 10:41
* 通常情況下子類中都會調用父類的方法.
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
class Employee
{
protected string _name;
public Employee(){}
public Employee(string name)
{
this._name=name;
}
public virtual void StartWork()
{
Console.Write(this._name + "開始工作:");
}
}
class Manager : Employee
{
public Manager(string name):base(name){}
public override void StartWork()
{
base.StartWork();//在子類中調用父類的方法
Console.WriteLine("給員工下達任務");
}
}
class Secretary : Employee
{
public Secretary(string name):base(name){}
public override void StartWork()
{
base.StartWork();//在子類中調用父類的方法
Console.WriteLine("協助經理");
}
}
class Seller : Employee
{
public Seller(string name):base(name){}
public override void StartWork()
{
base.StartWork();//在子類中調用父類的方法
Console.WriteLine("銷售產品");
}
}
//新增員工時只需要再新增一個類繼承自Employee
class Accountant : Employee
{
public Accountant(string name):base(name){}
public override void StartWork()
{
base.StartWork();//在子類中調用父類的方法
Console.WriteLine("管理公司財政");
}
}
class Test
{
static void Main()
{
Employee[] emp=new Employee[5];
emp[0]=new Manager("經理張三");
emp[1]=new Secretary("助理李四");
emp[2]=new Seller("王五");
emp[3]=new Seller("馬六");
emp[4]=new Accountant("錢七");
Console.WriteLine("早上八點,開始工作.");
foreach(Employee e in emp)
{
e.StartWork();
}
}
}
/*
* Created by SharpDevelop.
* User: Administrator
* Date: 2008/9/4
* Time: 下午 04:35
* 這里說明了用
* virtual && override
* virtual && new
* 這兩種組合的不成結果.
*
* 如果一個類的成員方法是虛方法,其子類可以使用override來覆蓋基類的虛方法
* 也可以用new來重建一個新的方法.這二者的不同是,用override會把基類的方法
* 完全覆蓋也就是最後不會有基類的方法存在了.而用new則不會把基類的方法覆蓋
* ,此時還是可以調用到基類的方法.
*
*/
using System;
public class A
{
public virtual void SetStr()
{
Console.WriteLine("AAA");
}
}
public class B:A
{
public override void SetStr()
{
Console.WriteLine("BBB");
}
}
public class C:A
{
public new void SetStr()
{
Console.WriteLine("CCC");
}
}
class Test
{
static void Main()
{
//A a=new A();
//a.SetStr();
//AAA
//A a=new B();
//a.SetStr();
//BBB
A a=new C();
a.SetStr();
//AAA,這里實際上執行的是基類A的方法
//B b=new B();
//b.SetStr();
//BBB
//C c=new C();
//c.SetStr();
//CCC
}
}
* Created by SharpDevelop.
* User: Administrator
* Date: 2008/9/4
* Time: 下午 04:35
* 這里說明了用
* virtual && override
* virtual && new
* 這兩種組合的不成結果.
*
* 如果一個類的成員方法是虛方法,其子類可以使用override來覆蓋基類的虛方法
* 也可以用new來重建一個新的方法.這二者的不同是,用override會把基類的方法
* 完全覆蓋也就是最後不會有基類的方法存在了.而用new則不會把基類的方法覆蓋
* ,此時還是可以調用到基類的方法.
*
*/
using System;
public class A
{
public virtual void SetStr()
{
Console.WriteLine("AAA");
}
}
public class B:A
{
public override void SetStr()
{
Console.WriteLine("BBB");
}
}
public class C:A
{
public new void SetStr()
{
Console.WriteLine("CCC");
}
}
class Test
{
static void Main()
{
//A a=new A();
//a.SetStr();
//AAA
//A a=new B();
//a.SetStr();
//BBB
A a=new C();
a.SetStr();
//AAA,這里實際上執行的是基類A的方法
//B b=new B();
//b.SetStr();
//BBB
//C c=new C();
//c.SetStr();
//CCC
}
}
申明
非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!
博文欢迎转载,但请给出原文连接。