《你必须知道的.NET》--简易不简单:认识枚举(Ⅲ)

本节主要内容包括:

  枚举类型全解;

  位标记应用;

  枚举应用规则。

Ⅰ、枚举

  在哪里可以看到枚举?打开每个文件的属性,我们会看到只读、隐藏的选项;操作一个文件时,你可以采用只读、可写、追加等模式。

  在.net中可以选择以类的静态字段来表达这种简单的分类结构,但是更明智的选择显然是--枚举!

  所有的枚举类型都隐式而且只能隐式的继承自System.Enum类型,System.Enum类型是引用类型,继承自System.ValueType的唯一不为值类型的引用类型。

  枚举类型是值类型,分配于线程的堆栈中,自动继承于Enum类型,但是本身不能被继承;Enum类型是引用类型,分配于托管堆中,Enum本身不是枚举类型,但是提供了操作枚举类型的公用方法。

        public enum week : int
        {
            sun = 7,
            mon = 1,
            tue, wed, thur, fri, sat,
            weekend = sun
        }
  a.类型转换:因为枚举类型本质上是证书类型的集合,因此可以与整数类型进行相互的类型转换,但是必须是显式的。    
            int i = (int)week.fri;
            week j = (week)3;

    或者用Parse方法来间接完成。  week w = (week)Enum.Parse(typeof(week),"2");

   b.与字符串的映射:

      包括ToString实例方法和Parse静态方法。     

   c.不同枚举的相互转换: 显示转换,如

      OtherWeek i = OtherWeek.mon;      

      week today = (week)i;

   d.与其他引用类型转换:

      Enum继承自--ValueType,Icomparable,IFormattable,IConvertible.

      因此,可以显式转换以上类型,和System.Object、System.Enum.

   e.常用方法:

      GetNames,获取枚举中符号名称数组;

      GetValues,获取枚举中所有符号数组;

      IsDefined,判断符号或者整数是否存在于枚举中;

      GetUnderlyingType,返回枚举实例的声明类型。    
    

Ⅱ、位枚举

  带[Flags]特性来标记的枚举。FlagsAttribute特性的作用是将枚举成员处理为位标记,而不是孤立的常数。  

  a.Enum.IsDefined方法不能应对位枚举成员,可以用该数值与枚举成员进行“位与”运算,结果不为0则表示该变量中包含该枚举成员,如    if ((test & Color.Red) !=0)    b.Flags特性将影响ToString、Parse和Format方法的执行过程和结果。   

  

  

时间: 2024-11-06 04:14:15

《你必须知道的.NET》--简易不简单:认识枚举(Ⅲ)的相关文章

C#刨根究底:《你必须知道的.NET》读书笔记系列

一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP-王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心得和感悟,将技术问题以生动易懂的语言展开,层层深入,以例说理.全书主要,包括了.NET基础知识及其深度分析,以.NET Framework和CLR研究为核心展开.NET本质论述,涵盖了.NET基本知识几乎所有的重点内容.全书分为5个部分,第1部分讲述.NET与面向对象,从底层实现角度分析了.NET如何实现面向

《你必须知道的.NET》读书笔记一:小OO有大智慧

此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.对象  (1)出生:系统首先会在内存中分配一定的存储空间,然后初始化其附加成员,调用构造函数执行初始化,这样一个对象实体就完成了出生过程. Person aPerson = new Person("小周" , 25); (2)旅程:在某种程度上就是外界通过方法与对象交互,从而达到改变对象状态信息的过程.这也和人的生存之道暗合. aPerson.ChangeName("Edis

《你必须知道的.NET》读书笔记二:小OO有大原则

此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.单一职责原则 (1)核心思想:一个类最好只做一件事,只有一个引起它变化的原因 (2)常用模式:Facade模式.Proxy模式 (3)基本方法:Extract Interface 抽取接口.Extract Class 抽取类.Extract Method 抽取方法 (4)DEMO:数据库管理系统中根据不同权限进行CRUD操作(这里是使用Proxy模式重构后的代码)   (5)规则建议: ①一个类只有一个引

张维迎:你必须知道的10个经济学原理

张维迎:你必须知道的10个经济学原理 五道口金融沙龙2016-10-13 10:15:59阅读(0)评论(0) 声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场.举报 加群请联系(微信号:wdkjrsl),由其审核通过后拉您进群 五道口金融沙龙是鸿儒金融教育基金会主办的公益性金融教育沙龙.沙龙已成功举办十三期,嘉宾分别是鸿儒金融教育基金会理事长许均华博士.德润租赁董事长王琨 先生.天图资本合伙人杨辉生先生.申万宏源集团首席经济学家房四海博士.前高盛首席

程序员必须知道的10大基础实用算法及其讲解

程序员必须知道的10大基础实用算法及其讲解 原文出处: cricode 算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比 较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构 上很有效率地被实现出来. 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子

《你必须知道的.NET》读书笔记三:体验OO之美

一.依赖也是哲学 (1)本质诠释:"不要调用我们,我们会调用你" (2)依赖和耦合: ①无依赖,无耦合: ②单向依赖,耦合度不高: ③双向依赖,耦合度较高: (3)设计的目标:高内聚,低耦合. ①低耦合:实现最简单的依赖关系,尽可能地减少类与类.模块与模块.层次与层次.系统与系统之间的联系: ②高内聚:一方面代表了职责的统一管理,一方面又代表了关系的有效隔离: (4)控制反转(IoC):代码的控制器交由系统控制而不是在代码内部,消除组件或模块间的直接依赖: (5)依赖注入(DI): ①

作为软件工程师,你必须知道的20个常识

1.针对面向对象的设计与分析:为了让软件有更好的可维护性,重用性以及快速开发, 简短的 OOAD 与它的 SOLID 原则对于每一个软件工程师来说都是该牢记的. 2.软件品质因素:软件工程的好坏与软件的品质因素是绝对关联的.请在开发过程中深刻的理解这一点. 3.数据结构与算法:深刻理解像数组,列表,栈,树,图,集合等这样的基本数据结构 ,并在软件开发过程的关键部分使用好的算法.这样整个软件逻辑就会很清晰了. 4.Big-O符号来标记算法复杂度:在开发过程中,请务必使用 Big-O 符号来比较两个

堆排序算法---《程序员必须知道的10大基础实用算法及其讲解》

> 原帖地址:http://www.oschina.net/question/1397765_159365 快速排序算法的基本特性: 时间复杂度:O(N * logN) 堆排序为不稳定排序,不适合记录较少的排序. var arr = [], count = 100, i = 0, parentIndex, exeCount = 0, startTime = + new Date(), stackSort = function(a){ if(a.length === 1) return a; va

《你必须知道的495个C语言问题》笔记--库函数

怎样把数字转为字符串(与atoi相反)?有itoa函数吗? 用sprintf就可以了: sprintf(string, "%d", number); 同理,也可以同sprintf把long型或浮点型转换成字符串(使用%ld或%f),也就是说,可以把sprintf看成是atol或者atof的 反函数. 怎样在日期上加n天?怎样取得两个日期的时间间隔? 第一个问题,mktime接受没有规范话的日期,所以可以用一个日期的struct tm结构,直接在tm_mday域上进行加减,然后 调用mk

《你必须知道的495个C语言问题》笔记--杂项

如何进行移位操作? 因为左移操作(<<)不会导致符号位出现缺位,不考虑符号位,低位补0即可.所以对于无符号和有符号数来说,均为逻辑左移. 右移操作(>>)会涉及到符号位出现缺位的问题,所以在有符号数的右移操作时要考虑符号位怎么补的问题.对于无符号数来说, 最左侧补0,即逻辑右移:对于有符号来说,最左侧补符号位,即符号右移. 实践: #include <stdio.h> int main(void) { unsigned rui; int ri; unsigned int