什么是枚举函数
枚举(enumeration),就是一组字面(单词),每一个字面对应一个字面值。ui
枚举有什么用处this
例如,须要把一年四季在程序中表示出来,可能会用0,1,2,3,分别表示一年四季中的春、夏、秋、冬。这样不能直观的表示出是哪一个季节,另外这样的代码不能成为健壮的代码。假设,咱们在程序中定义了一个int类型的变量seaSon,用它来存入季节。此时,能够把超出定义四季范围内的int类型数字赋值给seaSon.spa
int seaSon=5; //这行代码是合法的,不会报错。可是,5表明一年四季中哪一个季节?
枚举类型,就能够解决这些问题。code
怎么定义枚举对象
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.blog
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状态。