C#笔记(结构和枚举)

1 结构

结构是程序员定义的数据类型,与类非常类似,它也有数据成员和函数成员,与类不同的是:

  • 类是 引用类型,结构是 值类型
  • 结构是隐式密封的,这意味着它们不能被 派生,这也就是说 protectedabstractvirtual 等修饰符不能用于结构
  • 声明关键字struct
  • 结构可以有实例构造函数和静态构造函数,但不允许有析构函数
  • 预定义的无参数构造函数对每个结构都存在,而且 不能删除或定义
  • 在结构中,字段初始化语句 是不允许的

1.1 实例构造函数

C#隐式地为每个结构提供一个无参数的构造函数,这个构造函数把结构的每个成员设置为该类型的默认值。值成员设置成它们的默认值,引用成员设置为 null
预定义的无参数构造函数对每个结构都存在,而且不能删除或定义,对于类而言,编译器只在没有其他构造函数声明时提供隐式的无参数构造函数
调用一个构造函数,包括隐式无参数构造函数,要使用 new 修饰符

对结构进行分配比创建类的实例开销小,所以使用结构代替类有时可以提高性能

2 枚举

与类或结构一样,枚举也是由程序员定义的类型,同样的枚举是 值类型,而且枚举只有一种类型的成员:命名的整数值常量,其命名关键字是 enum,在枚举声明中没有分号,eg:

enum TrafficLight
{
    Green, // 没有分号
    Yellow,
    Red
}

每个枚举类型都有一个底层整数类型,默认为 int,每个枚举成员都被赋予一个底层类型的常量值,默认情况下,第一个成员赋值为0,后续加1。(使用 int 转化符可以转化成类型 int,以此看到底层的成员值)
关联的成员常量名称不能重复,而成员的编号则可以显式的命名为重复的数值。

2.1 位标志

程序员常用单个字的 不同位 来表示一组相关的信息,可将其称为 标志字,这些相关的信息个体称为 位标志
枚举提供实现它的简便方法,要创建一个带有适当的位标志的字,需要声明一个 该枚举类型的变量,并使用 按位或运算符 设置需要的位。eg:

TrafficLight ops = TrafficLight.Green | TrafficLight.Red | TrafficLight.Yellow;
// ops 是标志字,表达式内中的为位标志,被 按位或运算符 链接在一起

2.1.1 HasFlag 方法

要判断标志字是否包含特定的位标志及,可以使用枚举类型中的 HasFlag 布尔方法,在标志字上调用 HasFlag 方法,eg:

CardDeckSetting ops = CardDeckSettings.SingleDeck | CardDeckSettings.FancyNumbers;

CardDeckSetting testFlags = CardDeckSettings.SingleDeck; // 创建标志字实例作为 HasFlag 参数

bool useFancyNumbers = ops.HasFlag(testFlags);

2.1.2 GetName 方法

GetName 方法以 枚举类型对象整数 为参数(整数作为索引),返回响应的枚举成员名称

2.1.3 GetNames 方法

GetNames 方法以 枚举类型对象 为参数,返回该枚举中所欲成员的全部名称

eg:

enum TrafficLight
{
    Green,
    Yellow,
    Red
}

class Program
{
    static void Main()
    {
        Console.WriteLine("Second member of TrafficLight is {0}\n", Enum.GetName(typeof(TrafficLight), 1));
        foreach (var name in Enum.GetNames(typeof(TrafficLight)))
            Console.WriteLine(name);
    }
}

打印出:

Second member of TrafficLight is Yellow

Green
Yellow
Red
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值