zoukankan      html  css  js  c++  java
  • 变量和常量

    C#中的变量类型根据其定义可以分为两种,一种是值类型,另一种是引用类型,这两种类型的差异在于数据的存储方式,
      值类型的变量本身直接存储数据,而引用类型则存储实际数据的引用,程序通过引用找到真正的数据。

    值类型:值类型变量直接存储其数据值,主要包含整数类型、浮点类型以及布尔类型等等,值类型变量在堆栈中进行分配,因此效率很高,使用值类型的主要目的是为了提高性能。

    值类型的特性:
      1.值类型变量存储在堆栈中
      2.访问值类型变量,一般都会访问其实例
      3.每个值类型变量都有自己的数据副本,因此对一个值类型变量的操作不会影响其他变量
      4.复制值类型变量时,复制的是变量的值,而不是变量的地址
      5.值类型的变量不能为null值,必须有一个确定的值
      6.值类型是从System.ValueType类继承的类型

    基本的值类型:

      1.整数类型(代表一种没有小数点的整数数值,在局部变量时,要对其初始化,byte是一个8位无符号整数(0-255取值范围内))

      2.浮点类型 single(主要包含了float和double两种数值类型,如果不做任何操作,其默认值包含小数点的数值都被认为是double类型,
          float:如果要将数值以float类型来处理,就应该通过强制使用f和F将其强制指定为float类型。
              float theMySum=9.27f;
              float theMySums=1.27F;
          double:如果要将数值以double类型来处理,就应该通过强制使用d和D将其强制指定为double类型
              double myDou=927d;
              double mydou=927D;
      注意:如果需要使用float类型变量时,必须在数值的后面跟随f或F,否则编译器会直接将其作为double类型处理,
      也可以在double类型的值前面加上float,对其进行强制转换double mydou=float(927.77);

      3.布尔类型:布尔类型主要用来表示true/false值,一个布尔类型的变量,其值只能是true或者false,

        不能将其值他的值指定给布尔类型变量,布尔类型变量不能与其他类型进行转换,bool x=927,这样的赋值显然是错误的,编译器会返回提示"常量927无法转换为bool",
        布尔类型变量大多数被应用到流程控制语句,例如循环语句或者if语句等,
      注意:在定义全局变量时,如果没有特定的要求不要对其进行初始化,整数类型和浮点类型的默认初始化值为0,布尔类型的初始化为false


    引用类型:引用类型是构建C#应用程序的主要对象类型数据,在应用程序执行的过程中,预先定义的对象类型以new创建对象实例,
      并存储在堆栈中,堆栈是一种由系统弹性配置的内存空间,没有特定大小及存活时间,因此可以被弹性的运用于对象的访问

    引用类型具有以下特性:
      1.必须在托管堆中为引用类型变量分配内存
      2.必须使用new关键字来创建引用类型变量
      3.在托管堆中分配的每个对象都有与之相关的附加成员,这些成员必须得初始化
      4.引用类型变量是由垃圾回收机制来管理的
      5.多个引用类型对象可以引用同一个对象,这种情形下,对一个变量的操作会影响另一个变量所引用的同一对象
      6.引用类型被赋值前都是null

    值类型和引用类型的区别:

      在概念上来看,值类型直接存储其值,而引用类型存储对其值的引用,这两个类型存储在这内存的不同地方,从内存空间上来看,值类型是在栈中操作,而引用类型则在堆中分配内存,栈在编译时就分配好内存,在代码中有栈的明确定义而堆是程序运行中动态分配的内存空间,可以根据应用程序的运行情况动态地分配内存的大小,因此值类型总是在内存中占用一个预定义的字节数,而引用类型的变量在栈中分配一个内存空间,这个内存空间包含的是另一个内存位置的引用,这个位置是托管堆中的一个地址

    枚举类型:在定义枚举类型时,如果不对其进行赋值,默认情况下,第一个枚举类型的值为0,而后面的枚举数依次递增1

    其中,大括号{}中的内容为枚举值列表,每一个枚举值对应一个枚举值名称

        /// <summary>
        /// 定义一个枚举类型来判断今天是星期几
        /// </summary>
        enum MyDate
        {
            Sun = 0,
            Mon = 1,
            Tue = 2,
            Wed = 3,
            Thi = 4,
            Fri = 5,
            Sat = 6
        }
    
     static void Main(string[] args)
            {
               int k = Convert.ToInt32(DateTime.Now.DayOfWeek);
                switch (k)
                {
                    case (int)MyDate.Sun:
                        Console.WriteLine("周日");
                        break;
                    case (int)MyDate.Mon:
                        Console.WriteLine("周一");
                        break;
                    case (int)MyDate.Tue:
                        Console.WriteLine("周二");
                        break;
                    case (int)MyDate.Wed:
                        Console.WriteLine("周三");
                        break;
                    case (int)MyDate.Thi:
                        Console.WriteLine("周四");
                        break;
                    case (int)MyDate.Fri:
                        Console.WriteLine("周五");
                        break;
                    case (int)MyDate.Sat:
                        Console.WriteLine("周六");
                        break;
                    default:
                        break;
                }
                Console.Read();
            }            
    

      

    类型转换:类型转换就是讲一种类型转换成另一种类型,转换类型可以是隐式转换或者显示转换
        隐式转换:当一种类型的值转换为大小相等或者更大的另一类型时,则发生扩大转换,当一种类型值转换为较小的另一种类型,则发生收缩转换

          【将Int类型的值隐式转换成long类型】
              int i=927;
              long j=i; //隐式转换为long类型

        显式转换:显示转换也可以称为强制转换,需要类型之间进行转换,就需要使用显示转换
          【将double类型的x进行显示转换】
              double x = 19810927.102;
              int y = (int)x;

              double X = 19810927.102;
              int Y = Convert.ToInt32(X);

        装箱和拆箱:将值类型转换为引用类型的过程叫做装箱,反之,将引用类型转换为值类型的过程叫做拆箱
          【装箱允许将值类型隐式转换成引用类型】
            

      int i = 2008;
      object obj = i;
      Console.WriteLine("1.i的值为为{0},装箱之后的对象为{1}",i,obj);
      i = 927;
       Console.WriteLine("2.i的值为为{0},装箱之后的对象为{1}", i, obj);

      注意的是:将值类型变量复制到装箱得到的对象中,装箱后改变值类型变量时,并不会影响装箱对象的值

          【拆箱允许将引用类型显示转换成值类型】

        int i = 112;
        object obj = i;
        Console.WriteLine("1.i的值为为{0},装箱之后的对象为{1}",i,obj);
        int j =(int)obj ;
        Console.WriteLine("2.i的值为为{0},装箱之后的对象为{1}", i, obj);

      注意:拆箱后得到的值类型数据和装箱的值相等,但是在执行拆箱中,要符合类型一致的原则,否则会出现异常

    生命中最值得欣慰的,莫过于一觉醒来,你还在身旁
  • 相关阅读:
    160. 两个链表的相交点 Intersection of Two Linked Lists
    单链表的C#实现
    14. 字符串数组的最长公共前缀 Longest Common Prefix
    67. 二进制字符串相加 Add Binary
    .NET框架中SortedSet源码(红黑树)
    Guest CPU model configuration in libvirt with QEMU/KVM
    libvirt cpu mode
    host capability
    Stacktack overview
    Installing StackTach
  • 原文地址:https://www.cnblogs.com/chaonuanxi/p/9609748.html
Copyright © 2011-2022 走看看