博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
再说virtual
阅读量:5025 次
发布时间:2019-06-12

本文共 666 字,大约阅读时间需要 2 分钟。

看了对Anders Hejlsberg的,

1)C#中函数默认是非virtual的设计因为:在java中,一个方法默认是虚拟化的,只有对一个方法必须声明final关键字,这样这个方法才是非虚的,无法被子类重写。而C#中,方法默认是非虚的,只有加上virtual关键字,子类才能被重写。

Hejlsberg说,这样设计的好处是,第一,他观察到很多java程序员都忘写final;第二,虚化性能相对于非虚化要差一点。

2)virtual这个关键字其实含义是为了版本控制。用他自己的话说,

"版本控制最终会是语言设计的一大要素。它体现于你如何覆盖C#虚拟方法。同样因为版本控制,我们C#里重载的解决方案也和我所知的其它方法不大一样。无论何时,在设计特别的功能特性时,我们都会使用版本控制交叉检验。“在版本控制会如何改变它?从版本控制的角度来看,这个函数怎么样?”大多数以前的编程语言都没有考虑过这方面。"

并且

我对编程语言多年来变化进行观察。20-25年前,我们只有640k内存栅栏,每年都需要抛弃以前的代码,花一年时间重写一遍,正好赶上新版本发布的时间。所以你并不需要考虑重用?版本控制是什么?我们每年都需要重写一遍代码。但是这都已经过去了,再也不会碰到这样的问题。根据摩尔定律,我们恐怕也不会用光所有的存储容量。现在我们花更少的精力就可以比原来得到更多的基础设施和应用、功能。而系统的寿命也在增长,所以版本控制变得越来越重要。

 

转载于:https://www.cnblogs.com/Benjamin/p/3316584.html

你可能感兴趣的文章
为什么JS动态生成的input标签在后台有时候没法获取到
查看>>
20189210 移动开发平台第六周作业
查看>>
java之hibernate之基于外键的双向一对一关联映射
查看>>
rxjs一句话描述一个操作符(1)
查看>>
第一次独立上手多线程高并发的项目的心路历程
查看>>
ServiceStack 介绍
查看>>
Centos7下载和安装教程
查看>>
无谓的通宵加班之后的思索
查看>>
S1的小成果:MyKTV系统
查看>>
从setting文件导包
查看>>
编写一个函数isMerge,判断一个字符串str是否可以由其他两个字符串part1和part2“组合”而成...
查看>>
union和union all
查看>>
Github 开源:使用控制器操作 WinForm/WPF 控件( Sheng.Winform.Controls.Controller)
查看>>
PMD使用提醒
查看>>
Codeforces 887D Ratings and Reality Shows
查看>>
论文《A Generative Entity-Mention Model for Linking Entities with Knowledge Base》
查看>>
CentOS 6.7编译安装PHP 5.6
查看>>
Linux记录-salt分析
查看>>
Android Studio默认快捷键
查看>>
发布开源库到JCenter所遇到的一些问题记录
查看>>