惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

TaoSecurity Blog
TaoSecurity Blog
Jina AI
Jina AI
雷峰网
雷峰网
月光博客
月光博客
The GitHub Blog
The GitHub Blog
WordPress大学
WordPress大学
B
Blog RSS Feed
美团技术团队
C
CXSECURITY Database RSS Feed - CXSecurity.com
小众软件
小众软件
Security Latest
Security Latest
Microsoft Azure Blog
Microsoft Azure Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cybersecurity and Infrastructure Security Agency CISA
Last Week in AI
Last Week in AI
A
Arctic Wolf
Latest news
Latest news
Attack and Defense Labs
Attack and Defense Labs
I
Intezer
F
Fortinet All Blogs
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
Webroot Blog
Webroot Blog
S
Secure Thoughts
Help Net Security
Help Net Security
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
V
Visual Studio Blog
P
Proofpoint News Feed
博客园 - 【当耐特】
P
Privacy International News Feed
V
Vulnerabilities – Threatpost
Stack Overflow Blog
Stack Overflow Blog
Know Your Adversary
Know Your Adversary
云风的 BLOG
云风的 BLOG
Hacker News: Ask HN
Hacker News: Ask HN
L
LINUX DO - 最新话题
H
Help Net Security
爱范儿
爱范儿
酷 壳 – CoolShell
酷 壳 – CoolShell
S
SegmentFault 最新的问题
Forbes - Security
Forbes - Security
T
Tailwind CSS Blog
量子位
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tenable Blog
Cloudbric
Cloudbric
N
News and Events Feed by Topic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Hugging Face - Blog
Hugging Face - Blog

博客园 - 学习.NET

听说微软要收购 winrar 请教泛型方法重载的一个小问题 用guid类型的字段作主键,用char(36)好还是用uniqueidentifier好? 批量插入与更新 批判工厂方法模式 李斯与赵高 MSDN Magazine 微软首席架构师Anders Hejlsberg谈C#的一些东西。 迷惘中 实现简单多层表头的办法 如何实现数据转移?不知这个叫法对不对。 什么是多套帐?如何实现? 下载VS.NET2005 Beta1 人就是人 何时需要非规范化 复习基础知识:数据规范化 连接本机时,localhost的意思 正在出差,很长时间没来。 whidbey
代码复用
学习.NET · 2004-07-20 · via 博客园 - 学习.NET

下面是个人理解,不一定对。
代码复用有两个层面上的:一个是源码级别的,一个是二进制级别的。
对于源码级别的复用其优点是:
客户程序只要引用被复用的文件,就可调用源文件中的公共函数(也可看成类的静态方法)、继承源文件中的类,写一个子类。这样从功能上来说,源码级复用完全能满足复用的要求。
缺点是:
1、客户程序要明确知道被复用的源码,因为要被编译进客户程序,所以要开源。(对于流行开源的今天来说这算不上缺点,但对微软来说可能...)
2、可执行文件较大,要集各种功能于一身(这可能就是Delphi的可执行文件较大的原因,不知理解的对不对?)。

对于二进制级别的复用,就是dll了(当然还有各个厂商自己的二进制格式文件)。
其优点是:
1、不用公开源码,只公开其说明文档就行了。
2、可执行文件规模较小,功能模块可以在多个dll中。
其缺点是:
不能继承,如果不能继承,代码复用就大打折扣了。Com组件放到dll里,因为是二进制的,不能看到其中的类及其方法(当然可以用工具看,同时这一点我可能理解的不对),也就无法继承。

那么有没有一种方法,既能继承,又能使可执行文件较小,且不用公开源码的代码复用方案呢?要能实现继承,客户代码应该能看到各个父类的成员,及方法的执行过程。这样,应该将父类存放于什么格式的文件中就既不是源码,又不是二进制呢?他应该至于源码相关,与机器和操作系统没有关系。这就是要建立一种中间格式的文件。DotNet和java都是这样的。因此源码复用要在增加一种方式:中间代码级别的。

附:java简史(节选自《Java2核心技术》卷1第一章,据说是Sun官方推荐的书)

Java的历史可以回溯到1991年,那时候一个Sun工程师小组,在Patrick Naughton和JamesGosling(非常全面的计算机奇才)的领导下,着手设计一个小的能够用于像有线电视转换盒一类的消费设备的计算机语言。因为这些设备没有很强的处理能力和太多的内存,所以这个语言必须非常小并且能够生成非常紧凑的代码。还有,因为不同厂商可以选择不同的CPU,所以这个语言不能够限定在一个单一的体系结构之下,这是非常重要的。该项目称作“Green”。
代码需要小、紧凑以及与平台无关。该项要求使得开发团队重新搬出了早期PC上尝试过的一些Pascal实现模型。Niklaus Wirth-Pascal的发明者作为先驱者尝试把UCSD Pascal语言设计为一种能够为异构机器生成中间代码的可移植的语言(这常被称作虚拟机,相对应的就是Java虚拟机-JVM)。中间代码可以在任何安装有合适解释器的机器上使用。Green项目的工程师们也通过使用一个虚拟机来解决了他们的主要问题。
Sun的开发人员,都是些有很深的UNIX背景的家伙,所以他们的语言是基于C++而不是Pascal。并且,他们把该语言设计为面向对象的,而不是面向过程的。但是正如Gosling在采访中所说的那样,“毕竟,语言只是工具而非全部”。Gosling决定把这个语言称作“Oak”(起名的原因估计是因为他非常喜欢自己办公室窗外的橡树)。Sun的人员后来发现Oak是已经存在的一门计算机语言的名字,因此他们把名字改成了Java。