堆、栈、引用类型、值类型函数
内存分为堆和栈(PS:还有一种是静态存储区域 [内存分为这三种])spa
堆、栈:对象
堆和栈的区别:blog
引用类型、值类型接口
扩展:内存
装箱:值类型转换成引用类型get
拆箱:引用类型转换为值类型博客
实例:string
.NET中哪些是值类型?哪些是引用类型?it
案例展现:
class Program
{
static void Main(string[] args)
{
Person yaohongbo = new Person() { Name = "姚宏波", Age = 29 };
Person lilei = new Person() { Name = "李雷", Age = 22 };
int age = yaohongbo.Age;
yaohongbo.Age = 27;
Person zhangsan = lilei;
lilei.Name = "李磊";
Console.WriteLine("yaohongbo的age:"+yaohongbo.Age);
Console.WriteLine("age:" + age);
Console.WriteLine("lilei的name:" + lilei.Name);
Console.WriteLine("zhangsan的name:" + zhangsan.Name);
Console.ReadKey();
}
}
class Person
{
public string Name { get; set; }//引用类型
public int Age { get; set; }//值类型
}
运行结果:
代码说明:yaohongbo.Age是int类型,为值类型,因此代码int age=yaohongbo.Age,是将yaohongbo.Age变量存储的值复制了一份,而后让变量age存储这份拷贝,此拷贝和yaohongbo.Age无任何关系,因此咱们才能够看到上面的输出结果。
再看代码:
Person zhangsan = lilei;
lilei.Name = "李磊";
Person为自定义类,为引用类型,而引用类型穿的是引用,变量zhangsan指向的数据和变量lilei是同一个内存地址,即同一个对象,而不是像值类型那样,拷贝了一份变量lilei指向的数据给变量zhangsan。因此才会出现不管更改zhangsan韩式lilei的属性值,其余一个都会改变的状况。
本篇就到这里了,最后打个小广告:QQ群: .NET 一步步一幕幕 群号:590170361 (加群备注:博客园看到的)