您的位置:知识库 »

[你必须知道的.NET] 第四回:后来居上:class和struct

作者: Anytao  来源: 博客园  发布时间: 2008-09-11 16:22  阅读: 5326 次  推荐: 0   原文链接   [收藏]  
[1] [你必须知道的.NET] 第四回:后来居上:class和struct
[2] [你必须知道的.NET] 第四回:后来居上:class和struct

系列文章导航:

[你必须知道的.NET] 开篇有益

[你必须知道的.NET] 第一回:恩怨情仇:is和as

[你必须知道的.NET] 第二回:对抽象编程:接口和抽象类

[你必须知道的.NET] 第三回:历史纠葛:特性和属性

[你必须知道的.NET] 第四回:后来居上:class和struct

[你必须知道的.NET] 第五回:深入浅出关键字---把new说透

[你必须知道的.NET] 第六回:深入浅出关键字---base和this

[你必须知道的.NET] 第七回:品味类型---从通用类型系统开始

[你必须知道的.NET] 第八回:品味类型---值类型与引用类型(上)-内存有理

[你必须知道的.NET] 第九回:品味类型---值类型与引用类型(中)-规则无边

[你必须知道的.NET] 第十回:品味类型---值类型与引用类型(下)-应用征途

[你必须知道的.NET] 第十一回:参数之惑---传递的艺术(上)

[你必须知道的.NET] 第十二回:参数之惑---传递的艺术(下)

[你必须知道的.NET] 第十三回:从Hello, world开始认识IL

[你必须知道的.NET] 第十四回:认识IL代码---从开始到现在

[你必须知道的.NET] 第十五回:继承本质论

[你必须知道的.NET] 第十六回:深入浅出关键字---using全接触

[你必须知道的.NET] 第十七回:貌合神离:覆写和重载

[你必须知道的.NET] 第十八回:对象创建始末(上)

[你必须知道的.NET] 第十九回:对象创建始末(下)

[你必须知道的.NET]第二十回:学习方法论

[你必须知道的.NET]第二十一回:认识全面的null

[你必须知道的.NET]第二十二回:字符串驻留(上)---带着问题思考

[你必须知道的.NET]第三十二回,深入.NET 4.0之,Tuple一二


  那么,有人不免会提出,既然class几乎可以完全替代struct来实现所有的功能,那么struct还有存在的必要吗?答案是,至少在以下情况下,鉴于性能上的考虑,我们应该考虑使用struct来代替class:

 

  • 实现一个主要用于存储数据的结构时,可以考虑struct。

  • struct变量占有堆栈的空间,因此只适用于数据量相对小的场合。

  • 结构数组具有更高的效率。

  • 提供某些和非托管代码通信的兼容性。

  所有这些是struct有一席之地的理由,当然也许还有其他的更多说法,只是我不知道罢了:-)

  4. 经典示例

  4.1 小菜一碟

  下面以示例为说明,来阐述本文的基本规则,详细见注释内容。
  (1)定义接口

Code

(2)定义类

Code

(3)定义结构

Code

(4)测试结构和类

 

  猜猜运行结果如何,可以顺便检查检查对这个概念的认识。

  4.2 .NET研究

  在.NET 框架中,System.Drawing命名空间中的有些元素,如System.Drawing.Point就是实现为struct,而不是class。其原因也正在于以上介绍的各方面的权衡,大家可以就此研究研究,可以体会更多。另外,还有以struct实现的System.Guid。

  5. 结论

  对基本概念的把握,是我们进行技术深入探索的必经之路,本系列的主旨也是能够从基本框架中,提供给大家一个通向高级技术的必修课程。本文关于class和struct的讨论就是如此,在.NET框架中,关于class和struct的讨论将涉及到对引用类型和值类型的认识,并且进一步将触角伸向变量内存分配这一高级主题,所以我们有必要来了解其运行机制,把握区别和应用场合,以便在平常的系统设计中把握好对这一概念层次的把握。

  另外,请大家就以下问题进行讨论,希望能够更加清晰本文的拓展:

  •struct还主要应用在哪些方面?

  •C++和C#中,关于struct的应用又有所不同,这些不同又有哪些区别?

[第1页][第2页]
0
0
标签:.NET class struct

热门文章

    最新文章

      最新新闻

        热门新闻