频道栏目
读书频道 > 软件开发 > C# > C#高级编程(第8版)
1.3.1 面向对象和接口的支持
2013-10-25 10:36:33     我来说两句
收藏   我要投稿

本文所属图书 > C#高级编程(第8版)

《C 高级编程(第8版)》是C 2012和 NET 4 5高级技术的终极资源,旨在帮助读者更新、提高用C 2012和 NET 4 5编写Windows应用程序、Web应用程序、Windows 8样式应用程序的技巧。本书的顶级作者专家团队首先介  立即去当当网订购

.NET的语言无关性还有一些实际的限制。中间语言在设计时就打算实现某些特殊的编程方法,这表示面向它的语言必须与编程方法兼容,Microsoft为IL选择的特定道路是传统的面向对象的编程,带有类的单一继承性。

除了传统的面向对象编程外,中间语言还引入了接口的概念,在带有COM的Windows下第一次实现了接口。用.NET建立的接口与COM接口不同,它们不需要支持任何COM基础结构,例如,它们不是派生自IUnknown,也没有对应的GUID。但它们与COM接口共享下述理念:提供一个契约,实现给定接口的类必须提供该接口指定的方法和属性的实现方式。

前面介绍了使用.NET意味着要编译为中间语言,即需要使用传统的面向对象的方法来编程。但这并不能提供语言的互操作性。毕竟,C++和Java都使用相同的面向对象的范例,但它们仍不是可交互操作的语言。下面需要详细探讨一下语言互操作性的概念。

首先,需要了解一下语言互操作性的准确含义。

毕竟,COM允许以不同语言编写的组件一起工作,即可以调用彼此的方法。这就足够了吗?COM是一个二进制标准,允许组件实例化其他组件,调用它们的方法或属性,而无须考虑编写相关组件的语言。但为了实现这个功能,每个对象都必须通过COM运行库来实例化,通过接口来访问。根据相关组件的线程模型,需要在不同线程的内存空间和运行组件之间编组数据,这可能造成很大的性能损失。在极端情况下,组件保存为可执行文件,而不是DLL文件,还必须创建单独的进程来运行它们。重要的是组件仅能通过COM运行库与其他组件通信。使用不同语言的组件无法通过COM直接彼此通信,或者创建彼此的实例——系统总将COM作为中间件。不仅如此,COM体系结构还不允许利用继承实现,即它丧失了面向对象编程的许多优势。

一个相关的问题是,在调试时,仍必须单独调试使用不同语言编写的组件。不可能在调试器上交替调试不同语言的代码。语言互操作性的真正含义是用一种语言编写的类应能直接与用另一种语言编写的类通信。特别是:

用一种语言编写的类应能继承用另一种语言编写的类。

一个类应能包含另一个类的实例,而不管两个类是使用什么语言编写的。

一个对象应能直接调用用其他语言编写的另一个对象的方法。

对象(或对象的引用)应能在方法之间传递。

在不同的语言之间调用方法时,应能在调试器中交替调试这些方法调用,即调试不同语言编写的源代码。

这是一个雄心勃勃的目标,但令人惊讶的是,.NET和中间语言已经实现了这个目标。在调试器上交替调试方法时,Visual Studio IDE(Intergrated Development Environment,集成开发环境)提供了这样的工具(不是CLR提供的)。

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 中间语言
下一篇:1.3.2 不同的值类型和引用类型
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站