zoukankan      html  css  js  c++  java
  • 深入C#数据类型

     

                 技能掌握目标:

                 1.理解结构

                 2.理解装箱和拆箱

                 3.理解值类型和引用类型的概念

                 4.理解值类型和引用类型作为方法参数的区别

                 5.会使用值类型和引用类型作为方法参数解决问题

     

     值类型和引用类型:

    1.值类型和引用值类型

      值类型源于System.ValueType家族,每个值类型的对象都有一个独立的内存区域用于保存自己的值,值类型数据所在的内存区域成为栈(Stack)。只要在代码中修改它,就会在它的内存区域内保存这个值。值类型包括基本数据类型(如 int float double)、枚举类型和结构类型

      引用值类型源于System.Object家族,在C#中引用值类型主要包括数组、类和接口等。

    接下来是一个小的Example:

    题目:已知小明和小红去年的身高是170cm,而今年小明长高了50cm,小红没有变

     

     

    但是如果我用数组的话结果就是另说了~

     

    它的运行结果就是:

     

    哎?为什么我的赋值没有错误,但是为什么会两个的值都变了呢?

    那是因为引用类型和值类型的原因,引用类型和值类型的内存变化不一样,所以导致了两种结果的变化,接下来我为大家介绍一下引用类型和值类型在内存中的变化

    我们先讲值类型

    首先系统为变量I分配了一段储存空间,如图:

     

    然后程序将I的值赋给了J系统为变量J分配了一段储存空间,如图:

     

    最后 的值变成180,此时变量J对应的存储空间将发生变化:

     

    接下来我们讲引用值类型的内存运作,在讲引用值类型的时候我们用到了堆和栈,在这之后我会给大家单独开一个博客在解释堆和栈。

    我们用的引用值类型是数组我们来跟着代码看着草图来理解:

                Int[] nameMingAge = { 19 };

                int[] nameHongAge = nameMingAge;

                Console.WriteLine("去年小红的年龄是:{0} 小明的年龄是:{1}", nameHongAge[0], nameMingAge[0]);

                nameHongAge[0] = 20;

                Console.WriteLine("今年小红的年龄是:{0} 小明的年龄是:{1}", nameHongAge[0], nameMingAge[0]);

                Console.ReadLine();

     

    引用值类型和值类型的数据类型分类图:

     

    值传递和引用值传递的参数(ref

    值传递不带参数ref的方法和调用:

     

    它的运行结果是:

     

    加上值传递的参数 ref后的方法和调用:

     

    它的运行结果是:

     

    注意点:

    引用传递:只要参数前有ref关键字修饰,统统称为引用传递

    结论:如果是值传递(没有ref关键字),并且参数类型为值类型,那么结果不变

          如果是值传递(没有ref关键字),参数是引用类型,结果永久改变!@

          如果是引用传递(ref),无论参数是值类型还是引用类型,结果都会永久改变!!

     

    ----------------------------------------------------------------------------------------------------------------------

     

    接下来我们讲一讲结构吧:

    结构体

      .不能为结构体中变量赋初值

      .结构体中可以有方法,字段,属性

      结构体是值类型,而类是引用类型

      对结构体中的属性赋值的时候,可以不new出对象,直接通过变量名.属性赋值

      在什么场景下使用结构体?

      如果当前的抽象类型中属性量比较少的时候,我们可以考虑使用结构体

     

    接下来让我们看看如何使用结构:

    首先写介绍一下他的语法

    访问修饰符 struct 结构名

    {

       //结构体:也就是方法和属性。

    }

    接下来让我们以图片的方式来给大家展示定义结构的过程

    01.首先创建一个类叫做Student

    02.把关键字class改成struct并且前面加上public访问修饰符

    03.在Main方法中进行调用

     

    结构体我们就讲到这里,接下来我给大家讲讲装箱和拆箱:

    我们先做的就是装箱操作 如图:

     

    它的运行结果是:

     

    上面的图讲述的是装箱的方法,接下来讲一下拆箱的方法:

     

    它的运行结果是:

     

    对于装箱和拆箱的操作,本人认为能不要用最好就不要用,因为每次装箱和拆箱都会损耗一定的程序性能。而且当代码运行到公共语言规范(CLS)的时候系统会自动给弄些需要的变量进行装箱和拆箱操作,所以对于装箱和拆箱的内容我就一带而过了,这是本人的第三个博客,如果大家认为还可以的话记得关注哦~~~~

  • 相关阅读:
    1、jQuery基本认识
    Zabbix agent 启动报错:cannot set resource limit [13] Permission denied
    Zabbix agent启动报错:cannot create semaphore set
    Windows系统版本号对照表
    学习使用 vue mixin
    windows cmd 生成文件目录树
    合村并镇
    Adobe宣布今年12月31日正式终止支持Flash
    好春光
    npm package version
  • 原文地址:https://www.cnblogs.com/fengyepiaoluo/p/4060956.html
Copyright © 2011-2022 走看看