.net----结构和枚举

结构

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

  • 结构与类的区别

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

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

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

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

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

结构的声明和调用

声明

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

调用

结构名 结构变量名= new结构名 ([参数表]);

结构名 结构变量名;
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);
     }
  }

结构:结构的成员

  • 常量、字段、方法、属性、事件、索引器、运算符重载、带参数构造函数、嵌套结构(例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);

枚举: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();
        }

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醉卧考场君莫笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值