.NET 基础 一步步 一幕幕[面向对象之堆、栈、引…
2018-06-17 22:37:43来源:未知 阅读 ()
堆、栈、引用类型、值类型
内存分为堆和栈(PS:还有一种是静态存储区域 [内存分为这三种])
堆、栈:
堆和栈的区别:
- 栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;局部值类型变量、值类型参数等都在栈内存中。
- 堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小。
引用类型、值类型
- 1.将一个值类型变量赋给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对对象的引用,而不复制对象本身。
- 2.值类型不可能派生出新的类型:所有的值类型均隐式派生自 System.ValueType。但与引用类型相同的是,结构也可以实现接口。
- 3.值类型不可能包含 null 值:
- 4.每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。
- 5.
扩展:
装箱:值类型转换成引用类型
拆箱:引用类型转换为值类型
实例:
.NET中哪些是值类型?哪些是引用类型?
案例展示:
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 (加群备注:博客园看到的)
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python_0基础开始_day07 2019-08-13
- 【Python】语法基础 | 开始使用Python 2019-08-13
- Python基础总结之初步认识---class类的继承(终)。第十六天 2019-08-13
- python3基础之“小练习(3)” 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash