首页 / 软件开发 / .NET编程技术 / [你必须知道的.NET]第十回:品味类型---值类型与引用类型(下)-应用征途
[你必须知道的.NET]第十回:品味类型---值类型与引用类型(下)-应用征途2011-03-20 博客园 Anytao本文将介绍以下内容:类型的基本概念值类型深入引用类型深入值类型与引用类型的比较及应用1.引言值类型与引用类型的话题经过了两个回合([第八回:品味类型---值类型与引用类型(上)-内存有理]和[第九回:品味类型---值类型与引用类型(中)-规则无边])的讨论和切磋,我们就基本的理解层面来说已经差不多了,但是对这一部分的进一步把握和更深刻的理解还要继续和深化,因为我自己就在两篇发布之际,我就得到装配脑袋兄的不倦指导,之后又查阅了很多的资料发现类型在.NET或者说语言基础中何其重要的内涵和深度,因此关于这个话题的讨论还没有停止,以后我将继续分享自己的所得与所感。不过作为一个阶段,本文将值类型和引用类型的讨论从应用示例角度来进一步做以延伸,可以看作是对前两回的补充性探讨。我们从类型定义、实例创建、参数传递、类型判等、垃圾回收等几个方面来简要的对上两回的内容做以剖析,并以一定的IL语言和内存机制来说明,期望进一步加深我们的理解和分析。 2.以代码剖析下面,我们以一个经典的值类型和引用类型对比的示例来剖析,其区别和实质。在剖析的过程中,我们主要以执行分析(主要是代码注释)、内存分析(主要是图例说明)和IL分析(主要是IL代码简析)三个方面来逐知识点解析,最后再做以总结描述,这样就可以有更深的理解。2.1 类型定义定义简单的值类型MyStruct和引用类型MyClass,在后面的示例中将逐渐完善,完整的代码可以点击下载[类型示例代码]。我们的讨论现在开始,代码演示// 01 定义值类型
public struct MyStruct
{
private int _myNo;
public int MyNo
{
get { return _myNo; }
set { _myNo = value; }
}
public MyStruct(int myNo)
{
_myNo = myNo;
}
public void ShowNo()
{
Console.WriteLine(_myNo);
}
}
// 02 定义引用类型
public class MyClass
{
private int _myNo;
public int MyNo
{
get { return _myNo; }
set { _myNo = value; }
}
public MyClass()
{
_myNo = 0;
}
public MyClass(int myNo)
{
_myNo = myNo;
}
public void ShowNo()
{
Console.WriteLine(_myNo);
}
}