• .net----结构和枚举


    结构

    • 轻量级的类,与类很相似,均为包含数据成员和函数成员的数据结构

    • 结构与类的区别

    • 结构是值类型且被称为具有值语义;而类是引用类型且被称为具有引用语义

    • 结构不像类那样存在继承,所有结构都直接继承自 System.ValueType

    • 结构类型永远不会是抽象的,并且始终是隐式密封的

    • 与类不同,结构不允许声明无形参实例构造函数;每个结构隐式地具有一个无形参实例构造函数,始终返回相同的值;可以声明具有形参的实例构造函数

    • 在结构中不允许声明析构函数

    结构的声明和调用

    声明

    [特性]
    [结构修饰符][partial] struct  结构名 [类型形参] [: 基接口[类型形参约束]] 
    {
    结构体
    }[;]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    调用

    结构名 结构变量名= new结构名 ([参数表]);
    
    结构名 结构变量名;
    
    • 1
    • 2
    • 3
    public struct Point       // 平面坐标点
      {
        public int x, y;
        public Point(int x, int y) //有2个参数的构造函数
        {
            this.x = x;  this.y = y;
        }
      }
      class PointTest
      {
        static void Main()
        {
            Point p1 = new Point ();    //调用默认构造函数
            Console.WriteLine("平面坐标 1: x = {0}, y = {1}", p1.x, p1.y);
            Point p2 = new Point(10, 10);  //调用有2个参数的构造函数
            Console.WriteLine("平面坐标 2: x = {0}, y = {1}", p2.x, p2.y);
            Point p3; 
            //Console.WriteLine("平面坐标3: x = {0}, y = {1}", p3.x, p3.y);//编译错误
            p3.x = 22;  p3.y = 33;
            Console.WriteLine("平面坐标 3: x = {0}, y = {1}", p3.x, p3.y);
         }
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    结构:结构的成员

    • 常量、字段、方法、属性、事件、索引器、运算符重载、带参数构造函数、嵌套结构(例10.2)等

    • 结构不支持继承,结构成员的声明可访问性不能是protected或protected internal,函数成员不能是abstract或virtual

    • 结构不能声明默认构造函数(没有参数的构造函数)或析构函数

    • 实例字段声明中不允许含有变量初始值设定项,但静态字段可以

    枚举

    是值类型的一种特殊形式,用于声明一组命名的常量
    可以将基础类型的值分配给枚举,反之亦然
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    枚举的使用

     enum Color { Red, Green, Blue }
     Color color1 = Color.Blue;
            if (color1 == Color.Red) { Console.WriteLine("color1 is red"); }
            else { Console.WriteLine("color1 is not red"); }
            Color color2 = Color.Red;
            switch (color2)
            {
                case Color.Red:
                         Console.WriteLine("color2 is red"); break; 
                case Color.Green:
                         Console.WriteLine("color2 is green"); break;
                case Color.Blue:
                         Console.WriteLine("color2 is blue"); break;
            }
            Console.WriteLine("Color.Green = {0}", Color.Green);
            Console.WriteLine("Color.Green = {0}", (int)Color.Green);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    枚举:Flags枚举

    • 如果要表示复合状态,即对应枚举中的多个变量,则可以使用[Flags]特性标记

    • 使用[Flags]特性标记的枚举,可以将枚举作为位域(即一组标志)处理,其成员常量对应于整数的不同位,例如:0x01、0x02、0x04、0x08等
      在这里插入图片描述

            enum Days {Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday }; 
            enum BoilingPoints {Celcius = 100, Fahrenheit = 212};//沸点的摄氏和华氏温度
            [FlagsAttribute]
            enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 }; //4种颜色
    
            public static void Main()
            {
                Type weekdays = typeof(Days); Type boiling = typeof(BoilingPoints);
    
                Console.WriteLine("一周7天,对应于枚举类型Days中的值:");
                foreach (string s in Enum.GetNames(weekdays))
                  Console.Write("{0}={1} ", s, Enum.Format(weekdays, Enum.Parse(weekdays, s), "d"));
    
                Console.WriteLine("\n枚举类型BoilingPoints定义了如下值项:");
                foreach (string s in Enum.GetNames(boiling))
                  Console.Write("{0}={1} ", s, Enum.Format(boiling, Enum.Parse(boiling, s), "d"));
    
                Colors myColors = Colors.Red | Colors.Blue | Colors.Yellow;
                Console.WriteLine("\n枚举变量myColors存放如下颜色的组合:{0}", myColors);
                Console.ReadKey();
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    在这里插入图片描述

  • 相关阅读:
    ModbusCRC16校验 示例代码
    prometheus监控mysql主从
    如何判断一款软件的安全性?
    【COMP305 LEC 1 2】
    从零学算法239
    vBox+K8s坑记录
    【玩转Springcloud Alibaba系列】使用Nacos 实现服务注册与负载均衡
    java毕业设计——基于java+Jsp+Tomcat的牙科诊所管理系统设计与实现(毕业论文+程序源码)——牙科诊所管理系统
    Day46-50:统计图表项目总结
    现在市面跑步耳机哪款好用、分享五款适合跑步用的耳机推荐
  • 原文地址:https://blog.csdn.net/weixin_51422230/article/details/128024221