zoukankan      html  css  js  c++  java
  • .NET 基础 一步步 一幕幕[面向对象之堆、栈、引用类型、值类型]

    堆、栈、引用类型、值类型

    内存分为堆和栈(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 (加群备注:博客园看到的)

  • 相关阅读:
    ORM中介模型 + auth模块(用户登录校验)
    ModelForm
    Form组件------注册
    信贷相关业务
    pymongo
    开发者工具使用
    kindeditor文字编辑器 文章点赞评论操作
    VS Code:设置多行注释快捷键
    Nodejs:npm run build之后,distindex.html页面在火狐中可以正常显示登录页面并登录成功,在Chrome中可以正常显示登录页面,登录失败
    Maven:项目结构
  • 原文地址:https://www.cnblogs.com/yuhangwang/p/6270571.html
Copyright © 2011-2022 走看看