初识c#---枚举和结构体

来源:互联网 发布:网络走线cad图 编辑:程序博客网 时间:2024/06/10 11:34

  1.枚举
    枚举是值类型
    枚举的语法格式:enum 枚举名{
       枚举值1,
       枚举值2,
       枚举值3
    }
  enum Season
{ Spring,
  Summer,
  Autumn,
  Winter
}
    适用场合:适合那些固定的值或者代表一些特定的状态
    默认情况下:枚举值从0开始,依次递增
    枚举值可以更改的,如果枚举值2的值为-2,那么枚举值1为0,枚举值3是-1
    如果枚举值1为-1,枚举值2为0,枚举值3为1
 
    枚举和string,int之间的相互转换:
    ----int转枚举
    Color c = (Color)1;
    ----枚举转int
   int i = (int)Color.Red;
   ----枚举转string
   string s= Enum.GetName(typeof(Color), 3);
    ----string转枚举
    Color c = (Color)Enum.Parse(typeof(Color), "RED");
   
  2.struct
    语法格式:
    struct 结构体名
    {
        //字段
        public int hp;
        //构造函数
        //语法格式:
        public 结构体名(参数列表)
        {
           赋值操作;
        }
    }
   
    结构体的特点:
    1.是值类型
    2.构造函数可以有多个
    3.不能在结构体内部调用或重写默认的构造函数
    4.结构体成员--字段要全部赋值
    5.实例化结构体对象的时候,采用的是new关键字.需要
      注意的是,此时new关键字的作用仅仅是创建对象,没有开辟任何
      内存空间,这和类实例化对象是不一样滴.
    6.结构体和类是同级关系
    7.结构体内部可以存在多种成员变量,一般情况下,构成成员变量的
      组成是字段,属性以及函数(方法)
    8.构造函数是特殊的方法,它和一般的方法不一样的地方在于
      构造函数不可能存在返回值.
    9.构造函数支持方法重载,也就是说构造函数中的参数列表不可以完全相同(数量)
      它具备方法重载成立的所有判断标准
   10.结构体成员--字段不可以被直接初始化,但是常量字段除外.
   11.结构体没有析构函数
结构体和类的区别:
  相同之处:
1.都有构造函数
2.都有字段\属性\方法
3.在创建实例的时候,都是用的是new关键字(只不过new的意义不一样)
4.结构体和类中的构造函数都支持方法重载(可以有多个)
   区别:
1.结构体是不允许修改默认构造函数的,而类可以;
2. 结构体是值类型,而类是引用类型
3 .在结构体构造函数中,结构体的所有字段成员都需要赋值,而类不需要
4. 结构体的字段是不允许直接赋值的,但是常量字段除外
5.结构体中没有析构函数,而类有
6 .结构体new实例化的时候,仅仅是创建对象,没有在堆去开辟空间,而类new开辟了
7 .结构体不能被继承,而类可以
结构体在创建实例的时候,不需要开辟空间,因为结构体是值类型,那么适合存储小数据结构,就是那种需要调用一次就可以计算结果的结构,代表:向量类vector3
   而类在创建实例的时候,需要在堆中开辟空间,因为类是引用类型,适合存储大数据需要长时间占据内存的结构,代表 玩家类:Player

 
 3.访问修饰符
    public(公有的), 所有类都可以访问.
    private(私有的),只有本类可以访问.
 
  4.this关键字
    在结构体内部,代表结构体对象.
    在类内部,代表类对象.
    this关键字不可以出现在有static(静态)修饰的方法中.
 
补充内容:与运算 & 以及 或运算 |
            与运算,对位全是1,结果就是1,否则就是0
            Color c = Color.YELLOW & Color.BULE;//0
            Console.WriteLine(c);//RED
            或运算 对位全是0为0,否则就是1
            Color d = Color.YELLOW | Color.BULE|Color.RED;//3
            Console.WriteLine(d);//GREEN

补充 IsDefind检测枚举中是否包含某个枚举值
            if (Enum.IsDefined(typeof(Color), 7))
            {
                Console.WriteLine("枚举中包含7");
            }
            else {
                Console.WriteLine("枚举中不包含7");
            }