分享
 
 
 

对枚举类型、结构类型的一些认识

王朝学院·作者佚名  2016-05-20
窄屏简体版  字體: |||超大  

对枚举类型、结构类型的一些认识 什么是枚举

枚举(enumeration),就是一组字面(单词),每个字面对应一个字面值。

枚举有什么用处

例如,需要把一年四季在程序中表示出来,可能会用0,1,2,3,分别表示一年四季中的春、夏、秋、冬。这样不能直观的表示出是哪个季节,另外这样的代码不能成为健壮的代码。假设,我们在程序中定义了一个int类型的变量seaSon,用它来存入季节。此时,可以把超出定义四季范围内的int类型数字赋值给seaSon.

int seaSon=5; //这行代码是合法的,不会报错。但是,5代表一年四季中哪个季节?

枚举类型,就可以解决这些问题。

怎么定义枚举

enum Season{ SPRing,Summer,Fall,Winter; //Spring=0,Summer=1,Fall=2,Winter=3.默认第一个成员的字面值为0 //剩下的成员,按前面的成员字面值增加1.(第一个除外,它默认是0)}enum Season{ Spring=1,Summer,Fall=4,Winter; //此时Spring=1,Summer=2,Fall=4,Winter=5;}

默认情况下,枚举中的字面值为int类型,我们可以改为其他整数类型。例如:short,byte,sbyte,ushort,int,uint,long,ulong.

enum Season: short{Spring,Summer,Fall,Winter} //将字面值改为short类型

怎样使用枚举类型

enum Season{ Spring,Summer,Fall,Winter;}Season colorful=Season.Fall;Season colorful_1=Season.Summer; //初始化枚举类型的变量时,只能赋给枚举中定义的值。

适用于枚举的运算符

因为枚举中的字面值只能为整数类型,所以适用于整数类型的运算符都适用于枚举类型。(bitwise、shift除外)。

Static void doWork(){ Season first=Season.Spring; for(int i=0;i<4;i++) { Console.WriteLine(first); //依次输出Spring,Summer,Fall,Winter. first++; //自增运算符 } Console.WriteLine(first); //此时first超越了枚举定义的范围,此时f输出4。 }

什么是结构

跟类很相似,有自己的字段,方法,构造方法。

结构有什么用处

当一个类中存放的数据非常少,此时创建这个类所消耗的内存资源与它所存的数据不成比例。此时,我们可以考虑用结构来代替类。因为结构是值类型,存放在栈上,就减少了内存的开销。

怎样定义结构

structure Time{ private int hours,minutes,seconds;public Time(int hh, int mm,int ss){ this.hours=hh; this.minutes=mm; this.ss=ss;}pulbic int Hours(){ return this.hours;}}

结构与类的区别

结构与类的区别有以下两种:

1.不能自己定义默认的构造方法.(没有参数的构造方法)。以下代码,如果是类,不会报错。

structure Time{ public Time(){ //会报错,结构类型不允许自己定义默认的构造方法。}}

因为,编译器在编译时,如果发现类中没有构造方法,就会自动生成一个。如果类中有构造方法,就不会自动生成。编译器不关结构中有没有构造方法,都会自动生成构造方法。与类中的默认构造方法一样,结构中的构造方法,会把结构中的字段根据所对应的类型初始化为null,0,false.可以通过非默认构造函数改变字段值。初始化结构中的字段,必须全部初始化。

struct Time{ private int hours,minutes,seconds; public Time(int hh, int mm){ this.hours=hh; this.minutes=mm; //会报错,seconds没有初始化}}

2.在类中,我们可以定义字段时初始化,但是在结构中不可以。

struct time{ private int hours=0; //报错,定义时不能初始化 private int minutes; private int seconds;}

理解结构初始化

Time now=new Time(); //我们创建了一个结构类型的对象now。new这个关键字调用了Time结构的 //默认构造函数,把它的字段初始化为0. //因为结构是值类型,我们也可以这样: //Time now; //但是此时,访问now中的任意成员,都会报错。因为没有初始化now中的字段,它们都是 //uninitialized状态。

我们创建了一个结构类型的对象now。new这个关键字调用了Time结构的默认构造函数,把它的字段初始化为0. 因为结构是值类型,我们也可以这样: Time now; 但是此时,访问now中的任意成员,都会报错。因为没有初始化now中的字段,它们都是uninitialized状态。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有