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("<br>");
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     /// <summary>
21     /// 抽象类动物
22     /// </summary>
23     public abstract class Player
24     {
25         /// <summary>
26         /// 运动员名字
27         /// </summary>
28         public string Name;
29         /// <summary>
30         /// 虚方法,获取名字
31         /// </summary>
32         public virtual string getName()
33         {
34             return "我是运动员,我的名字叫:" + Name + "<br>";
35         }
36         /// <summary>
37         /// 虚方法,获取运动员体重
38         /// </summary>
39         public virtual string getWeight()
40         {
41             return "运动员体重50公斤<br>";
42         }
43         /// <summary>
44         /// 抽象方法,获取运动员专长
45         /// </summary>
46         /// <returns></returns>
47         public abstract string getSpecial();
48     }
49     /// <summary>
50     /// 运动员的派生类
51     /// </summary>
52     public class BasketBallPlayer : Player
53     {
54         /// <summary>
55         /// 重写虚方法override
56         /// </summary>
57         public override string getName()
58         {
59             return "我是篮球巨星:" + Name + "<br>";
60         }
61         /// <summary>
62         /// 不用override,可以不写new,但会引起警告错误,编译时系统会自动为它加上new关键字
63         /// </summary>
64         public new string getWeight()
65         {
66             return "篮球巨星体重100公斤<br>";
67         }
68         public override string getSpecial()
69         {
70             return "投篮准<br>";
71         }
72     }
复制代码

 

posted @   巴蒂尔  阅读(2357)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示