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     }
时间: 2024-08-04 17:34:04

C#虚方法和抽象方法区别的相关文章

虚方法的重写与普通方法的隐藏的区别;抽象方法和虚方法有什么区别?

两者都可实现对基类方法的重写 ,虚方法在基类中virtual ,在派生类用override关键字修饰,而普通方法的隐藏在基类不用什么修饰符,而在派生类中用new关键字进行重写 ,我想问,它们同样是方法的重写, c#为什么会有两种方法重写方法,这样设计不是重复了呢, 这怎么理解呢? 不重复,首先如果基类里面的virtual方法被子类继承之后,用override重写之后,那么子类里面就只有一个该方法名的方法了.而另一个普通的,就是在子类里面直接通过new 来新建一个方法那叫重载(多态分为重写和重载)

虚方法与抽象方法有什么区别

抽象方法是只有定义.没有实际方法体的函数,它只能在抽象函数中出现,并且在子类中必须重写:虚方法则有自己的函数体,已经提供了函数实现,但是允许在子类中重写或覆盖. 重写的子类虚函数就是被覆盖了. 抽象方法 使用abstract关键字 public abstract bool Withdraw(-); 抽象方法是必须被派生类覆写的方法. 抽象方法是可以看成是没有实现体的虚方法 如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法 虚方法 使用virtual关键字 public

虚方法和抽象方法的区别

虚方法:就是以virtual关键字修饰并在一个或多个派生类中实现的方法.如果一个方法被virtual标记,则不可再被static.abstract和override修饰. 抽象方法:是以abstract关键字修饰的方法,抽象方法可以看做是没有实现体的虚方法,并且必须在派生类中被重写,如果一个类包括抽象方法,则该类就是一个抽象类. (一) 虚方法 1.虚方法中必须包含实现,abstract修饰的方法一定不能包含实现: 2.virtual可以被子类重写,而abstract必须被子类重写: class

虚方法与抽象方法的区别

抽象方法 使用abstract关键字 public abstract bool Withdraw(…),没有方法体. 抽象方法必须被派生类重写. 任何类中,若存在抽象方法,这个类必须定义为抽象类(不过,里面可以不包含抽象方法). =============================================================================== 虚方法 使用virtual关键字 public virtual bool Withdraw(){....}(有

C#类、接口、虚方法和抽象方法

虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢? 1. 虚方法必须有实现部分,并为派生类提供了重写该方法的选项.抽象方法没有提供实现部分,抽象方法是一种强制派生类重写的方法,否则派生类将不能被实例化 2. 抽象方法只能在抽象类中声明, 抽象方法必须在派生类中重写.虚方法不是也不必要重写.其实如果类包含抽象方法,那么该类也是抽象的,也必须声明为抽象的 3. 抽象方法必须在派生类中重写,这一点跟接口类似,虚拟方法不必.抽象方法不能声明方法体,而虚拟方法可以. 包含抽象方法的类不能实例化 ,

c++第八章-(虚方法与抽象方法)

1.虚方法(Virsual Method) 虚方法是继承的,一旦在基类里把某个方法声明为虚方法,在子类里就不可能再把它声明为一个非虚方法了. 在基类里把所有的方法都声明为虚方法会让最终生成的可执行代码的速度变得稍微慢一些,但好处是可以一劳永逸地确保程序的行为符合你的预期. 析构器都是虚方法!从编译的角度看,他们只是普通的方法.如果他们不是虚方法,编译器就会根据他们在编译时的类型而调用那个在基类里定义的版本(构造器),那样往往会导致内存泄露! class Pet { public: Pet(std

虚方法和抽象方法--基础回顾

抽象方法是只有定义.没有实际方法体的函数,它只能在抽象函数中出现,并且在子类中必须重写:虚方法则有自己的函数体,已经提供了函数实现,但是允许在子类中重写或覆盖.重写的子类虚函数就是被覆盖了. 抽象方法 使用abstract关键字 public abstract bool Withdraw(…); 抽象方法是必须被派生类覆写的方法. 抽象方法是可以看成是没有实现体的虚方法 如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法 虚方法 使用virtual关键字 public v

虚方法与抽象方法

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

大龙的学习笔记之“虚方法,抽象方法,重写,抽象类,接口”

虚方法:可以重写,也可以不重写,英文名:virtual 抽象方法:必须重写,必须放在抽象类中,英文名:abstract 重写:可以重写三种方法:virtual,abstract,override,英文名:override 抽象类:可以有抽象方法,也可以有非抽象方法,英文名:abstract 接口:和抽象类相似,但是里面只有未实现的方法,英文名:interface 大龙的学习笔记之"虚方法,抽象方法,重写,抽象类,接口",布布扣,bubuko.com