Welcome

首页 / 软件开发 / .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);
}
}