值类型和引用类型

来源:互联网 发布:dokidokilive直播软件 编辑:程序博客网 时间:2024/06/08 14:15
 常量  C#中定义常量的语法:访问修饰符 const 数据类型 常量名  =值  如:public const double pai=3.14;
  枚举  在处理非数值的数据时,普通的系统数据类型就无法再解决此类数据,例如:性别、星期等,例如在学生类里有_sex字段,如果我们用
系统的数据类型去定义,那就只能是 string _sex,当我们给它赋值时,我们都知道,只能赋“男”或“女”,但是当有人给它赋其他值时,在语法上
是没有问题的,但是理论上却不行,所以在此时我们需要解决这个问题,这时候枚举就先得非常合适了。
  枚举语法:public enum 枚举名
            { 
          标识符[=整形常数]
          标识符[=整形常数]
          标识符[=整形常数]
            }
  类可以产生一个对象,但有时需要将一个对象作为内置的一个数据类型以加快分配,比如颜色本身是一个对象,但是在C#中颜色被直接
看作是一个数据类型,再比如整形是我们在编程中常用的一个数据类型,它本身也是个对象,但是如果用类来表示的话,会增加很大消耗,
也会出现过多的引用重载或开销,为解决这个问题,C#中使用了结构。
  结构语法:访问修饰符  struct 结构名
              {
               ///结构体
              }
   结构实例:struct ReaderStruct
  {
  string _name;
  public string Name
  {
   get{return _name;}
   set{_name=values;}
   }
  }
  int _age;
  public viod Read()
  {
  //方法体
  }
  结构跟类很相似,但有以下区别:
  结构      类
 值类型,在堆栈上分配地址   引用类型,在堆上分配地址
 没有默认的构造方法,但是可以添加构造方法 有默认的构造方法
 没有析构函数     有析构函数
 不能给字段赋值     可以给字段赋值
 不能有protected修饰符    可以使用
 不能添加无参构造方法    可以添加
 不能被继承     能被继承
  值类型  当创建一个值类型的时候,都会在堆栈上开辟一块新的内存空间来保存值,当修改这个值的时候其实是修改它所在的内存空间的值。
  引用类型  C#中除了值类型还有一类叫引用类型,引用类型和值类型的存储方式不同,当创建一个引用类型的时候,在堆上分配一块空间,用来
存储引用类型(类)对象,当给这个引用类型赋值的时候,在堆栈上划分一块空间用来存储类在这个堆上的地址(当给这个地址起名字的时候就是所定义的
变量名)。在给引用类型赋值的时候,其实赋值的是引用类型的地址。
  装箱  C#中由值类型转换为引用类型叫做装箱。拆箱是装箱的逆过程。
 
原创粉丝点击