仓库和物品? 堆和栈!值类型和引用类型~~~~
来源:互联网 发布:java虚拟主机管理系统 编辑:程序博客网 时间:2024/06/06 00:15
struct Date
{
byte year;
byte month;
byte day;
public Date(byte yy, byte mm, byte dd)
{
this.year=yy;
this.month = mm;
this.day = dd;
}
public Date(byte yy ,byte mm)
:this(yy,mm,1)
{
}
public Date(byte yy)
{
this.year=yy;
this.month=1;
this.day =1;
}
}
class Brithday
{
byte year;
byte month;
byte day;
public Brithday (byte yy,byte mm,bytedd)
{
this.year=yy;
this.month=mm;
this.day=dd;
}
public Brithday(byte yy, byte mm)
:this(yy,mm,1)
{
}
public Brithday(byte yy)
{
this.year=yy;
}
}
对于C#中的值类型和引用类型,查阅了相关资料后,来谈一下自己的理解:实际上,我们可以将值类型和引用类型同堆栈的关系比作仓库与仓库中堆放的物品,我们对物品的箱子进行编号,再将编号记录在一个本子上面,那么这个本子就是栈,仓库就是堆.对于本子上的数据进行操作,并不影响物品的情况,这种类型就是值类型,类似于VB中的按值传递;而如果对仓库里面的物品进行操作的话,那么物品就会发生相应的变化,这种类型的就是引用类型,类似于VB中的按址传递;
如:对例1中定义的结构作如下操作:
// 使用结构
static void UseStruct()
{
Date labourDay = new Date(5, 1);
Date yaoMingBirth = labourDay;
labourDay.ReadDate();
yaoMingBirth.ReadDate();
yaoMingBirth.Change(1980, 11, 8);
labourDay.ReadDate();
yaoMingBirth.ReadDate();
}
显示结果:
5-1
5-1
5-1
1980-11-8
修改其中一个变量的值,不会影响和它同一个拷贝的另外一个变量。
如:对例1中定义的类进行如下操作:
// 使用类
static void UseClass()
{
Birthday myBirth = newBirthday(1987, 6, 12);
Birthday liliBirth = myBirth;
myBirth.ReadDate();
liliBirth.ReadDate();
myBirth.Change(1990, 3, 16);
myBirth.ReadDate();
liliBirth.ReadDate();
}
显示结果:
1987-6-12
1987-6-12
1990-3-16
1990-3-16
修改一个引用的值,另一个相同的引用的值就会发生改变。
也就是说:结构是值类型数据.存储在栈(stack)中。结构进行数据复制的时候,是将原来数据进行备份。创建结构时,结构赋值到的变量保存该结构的实际数据。将结构赋给新变量时,将复制该结构.因此,新变量和原始变量包含同一数据的两个不同的副本。 对一个副本的更改不影响另一个副本。而引用类型恰好相反.
联系VB我们可以想到,对于C#中的值类型和引用类型,我们可以将它们看成VB中的按值传递和按参数传递.C#中的引用类型相似于VB中的按地址传递,而值类型则类似于C#中的按值传递.
- 仓库和物品? 堆和栈!值类型和引用类型~~~~
- 栈和堆,值类型,引用类型
- 值类型和引用类型,栈和堆的含义
- C#基础 栈和堆、值类型和引用类型
- 值类型和引用类型,栈和堆的含义
- 值类型何引用类型,堆和栈
- 栈和托管堆/值类型和引用类型/强制类型转换/装箱和拆箱
- C++ : 从栈和堆来理解C#中的值类型和引用类型
- 浅谈值类型和引用类型在堆和栈中的存储一
- C#基础--值类型和引用类型,栈和堆的含义
- 值类型和引用类型
- 值类型和引用类型
- 值类型和引用类型
- 值类型和引用类型
- 引用类型和值类型
- 值类型和引用类型
- 值类型和引用类型
- 值类型和引用类型
- Linux常用的网络命令
- Win32 结构化异常处理(SEH)探秘(续)
- hosts和hosts_backup有什么区别
- Spring AOP 详解
- CF—98A—Help Victoria the Wise
- 仓库和物品? 堆和栈!值类型和引用类型~~~~
- 指针和指针强制转换( 回忆版 )-------让初学者理解
- ATL_NO_VTABLE详解
- 设计模式(2)结合代码和例子来理解简单工厂模式
- 动态规划之最长子序列(线性)
- 附加数据库出错
- 完全卸载xcode
- allegro使用小技巧备忘录
- 项目2辅助学习练习2