变量和常量

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);

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

 

转载于:https://www.cnblogs.com/chaonuanxi/p/9609748.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值