您的位置:首页 > 编程语言 > C#

对virtual关键字的思考

2016-01-02 21:04 197 查看
C++与C#/JAVA中有一个virtual关键字。

C++中有这一关键字是有历史原因的。

C++中虚函数的实现使用到了虚表,如果一个类的成员函数有虚函数,因为要存储虚表指针,其占用的空间会比存储所有数据成员所需要的内存空间大,从而造成与C语言中的结构体内存占用不一样,最终与C语言不兼容。

为了兼容C语言,C++实现的方式是对于所有无虚函数的类,都没有虚表指针,从而这样的类与C语言的结构体是可以兼容的。

如果要实现这一点,也有两种不同的实现方式。

一种方式是干脆禁止对C风格结构体的继承,将类分为两类,一种类是可以继承的,一种类是不可以继承的。

另一种方式是C++所采用的,对于每一个成员函数进行声明。如果所有成员函数都不是virtual的,那么这一个类就是一个C风格结构体。

而C#中用virtual关键字,我个人觉得没有很强的必要性。

也可能是我见识有限,反正我是想象不出有这样一种场景,子类与父类的同名函数不应该是虚函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面向对象 C#