您的位置:首页 > 编程语言 > C#

值类型和引用类型的区别案例

2009-11-03 15:09 197 查看
 C#中数据类型主要分为值类型和引用类型,而值类型和引用类型在使用的过程中有什么区别呢,我觉得接触最多的就是下例中值的修改。

 以下实例是从《你必须知道的.NET》(王涛著) 摘录

using System;
class ValueTest
{
//定义值类型
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);
}

}
//定义应用类型
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);
}
}
//值类型和引用类型的区别
public static void Main()
{
//内存分配于线程的堆栈上
//创建了值为等价“0”的实例
MyStruct myStruct=new MyStruct();

//在线程的堆栈上创建了引用,但未指向任何实例
MyClass myClass;
//内存分配于托管堆上
myClass=new MyClass();

//在堆栈上修改成员
myStruct.MyNo=1;
//将指针指向托管堆
myClass.MyNo=2;

myStruct.ShowNo();
myClass.ShowNo();

//在堆栈上新建内存,并执行成员拷贝
MyStruct myStruct2=myStruct;
//拷贝引用地址
MyClass myClass2=myClass;

//在堆栈上修改myStruct的成员
myStruct.MyNo=3;
//在托管堆上修改成员
myClass.MyNo=4;

myStruct.ShowNo();
myClass.ShowNo();
myStruct2.ShowNo();
myClass2.ShowNo();
}

}


输出:

1

2

3

4

1

4
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struct class .net c#