很多书籍和文章都对Java和C#之间的相同与不同之处做了比较,下面是Java与C#之间的共同点的一个简单的列举:
特点 | Java | C# |
面向对象语言 | 是 | 是 |
独立于机器语言的中间语言 | 是 | 是 |
类打包 | Jar包文件 | 程序集(Assembly)以exe,dll或module文件存在 |
类名称空间 | 有 | 有 |
类加载机制 | 由类加载器加载到JVM中 | 由.Net应用程序域加载 |
独立的类空间 | 不同的类加载器(Class Loader)加载的类具有独立的逻辑空间,相互不可见 | 不同的应用程序域(Application Domain)加载的程序集不可见,具有独立的逻辑空间 |
运行时环境 | JVM | .Net Runtime |
在OSGi中最重要的概念就是Bundle,Bundle介于Jar包和应用系统之间,通过MANIFEST.MF文件中定义的元数据,来描述Bundle资源信息。同样,在.Net中,Bundle可以用程序集(Assembly)来实现,程序集的Manifest文件与Bundle的元数据文件类似,用于存储程序集的元数据信息,可以扩展该文件实现Bundle的规范。
Bundle加载后在OSGi环境中具有独立类空间,每个Bundle具有独立的类加载器,如下图所示。
JVM中的类加载器在.Net中可以用应用程序域(Application Domain)实现,一个应用程序域可以加载一个或多个应用程序集,共享的应用程序集可以加载到中立的应用程序域中。如下图所示:
以上关键问题的解决是不是就可以使用.Net实现OSGi的思想了呢?应该可以吧!