C#虚方法和抽象方法区别

虚方法:

1、virtual方法表示此方法可以被重写, 也就是说这个方法具有多态.父类中的方法是通用方法,可以在子类中重写以重新规定方法逻辑。
2、virtual方法可以直接使用,和普通方法一样。
3、不是必须重写的. 子类可以使用base.方法 的方式调用, 无论有没有在子类使用override去重写。
virtual关键字只是明确标示此方法可以被重写, 其实它和一般的方法没有什么区别
相应的
sealed关键字标示此方法不可以被重写

抽象方法:

1、抽象方法没有提供实现部分。

2、抽象方法只能在抽象类中声明。

3、抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化。

 

上代码:

 1     protected void Button1_Click(object sender, EventArgs e)
 2         {
 3             BasketBallPlayer basketplayer = new BasketBallPlayer();
 4             basketplayer.Name = "姚明";
 5             Response.Write(basketplayer.getName());
 6             Response.Write(basketplayer.getWeight());
 7             Response.Write(basketplayer.getSpecial());
 8 
 9             Response.Write("
"); 10 11 Player player = new BasketBallPlayer(); 12 player.Name = "王飞人"; 13 Response.Write(player.getName()); 14 Response.Write(player.getWeight()); 15 Response.Write(player.getSpecial()); 16 17 } 18 } 19 20 /// 21 /// 抽象类动物 22 /// 23 public abstract class Player 24 { 25 /// 26 /// 运动员名字 27 /// 28 public string Name; 29 /// 30 /// 虚方法,获取名字 31 /// 32 public virtual string getName() 33 { 34 return "我是运动员,我的名字叫:" + Name + "
"; 35 } 36 /// 37 /// 虚方法,获取运动员体重 38 /// 39 public virtual string getWeight() 40 { 41 return "运动员体重50公斤
"; 42 } 43 /// 44 /// 抽象方法,获取运动员专长 45 /// 46 /// 47 public abstract string getSpecial(); 48 } 49 /// 50 /// 运动员的派生类 51 /// 52 public class BasketBallPlayer : Player 53 { 54 /// 55 /// 重写虚方法override 56 /// 57 public override string getName() 58 { 59 return "我是篮球巨星:" + Name + "
"; 60 } 61 /// 62 /// 不用override,可以不写new,但会引起警告错误,编译时系统会自动为它加上new关键字 63 /// 64 public new string getWeight() 65 { 66 return "篮球巨星体重100公斤
"; 67 } 68 public override string getSpecial() 69 { 70 return "投篮准
"; 71 } 72 }

 

转载于:https://www.cnblogs.com/lijianhong90/p/4075015.html

你可能感兴趣的:(C#虚方法和抽象方法区别)