(12)C#枚举,结构

枚举

枚举类型是类似自定义的一个类,类里放着你自己定义的常量,关键字enum。

enum Season{spring,summer,fall,winter}

想用这里的常量的话,首先把变量定义成 Season类型,然后再给它赋值

Season a=Season.fall;
Console.WriteLine(a);//输出结果 fall

枚举类型的每一个常量都对应着一个整数值。默认第一个是0,往后依次加1.

上面的spring相当于0,summer相当于1,fall相当于2,winter相当于3.

Console.WriteLine(int(a));//结果输出 2

 

默认常量是一个int的值,如果想声明成其他类型加 :数据类型

enum Season:short{spring,summer,fall,winter}

这样做的目的是为了节省内存。short比int占的字节要少。

枚举类型可以定义成8种整数类型的任何一种:byte,sbyte,short,ushort,int,uint,long,ulong.

 

结构

结构是值类型,数据直接存储在上。关键字是struct。不能手动写一个默认的无参构造函数,不然执行程序时会报错。

struct A 
    {
        A() 
        {
        //运行程序时会报错,显示“结构部能包含显式的无参数构造函数”(写完看不出错误,运行时才会报错)
        } 
    }

出错原因:声明的结构始终会帮我们生成一个默认的无参构造函数。(类是只有在没写无参构造函数时才会默认生成)

 结构的赋值

结构不能直接给变量赋值,除非加了静态关键字。

struct A
    {
        public static int x = 5;//可以
        public int y=5;         //报错 “结构中不能有实例字段初始值”
    }    

结构变量的使用

使用srtuct有两种方法:

1、实例化结构

 A a=new A();

2、直接创建

A a;

虽然这两种方式创建后使用的字段都在栈上,但他们的区别在于

.用new实例化的会调用构造函数给他里面的字段初始化。

.但直接创建的它里面的字段需要初始化后才能使用

 struct A
    {
        public static int x ;
        public int y;         
    }    
    class B
    {
        public static void Main(string[] args) 
        {
            A a=new A();
            Console.WriteLine(A.x);// 结果为0
            Console.WriteLine(a.y);// 结果为0
        }

这里构造函数会为x,y进行初始化。一般默认初始成0、false、null

 struct A
    {
        public static int x = 5;
        public int y;         
    }    
    class B
    {
        public static void Main(string[] args) 
        {
            A a; //声明A 值类型不需要new
            a.y = 6;//给y赋值
            Console.WriteLine(A.x);//静态直接用 A 结果输出 5
            Console.WriteLine(a.y);//输出6
        }

 因为A是值类型所以可以直接用 A a;但是由于没有调用构造器所以需要自己手动的行进初始化。不然会报错。

几点注意

.虽然结构不能用无参构造函数但是可以有含参的构造函数

.结构不能被继承,也不能当做父类

.结构可实现一个或多个接口

.结构成员不能指定为 abstract、virtual 或 protected

.结构不能定义析构函数

 

posted @ 2016-06-24 11:38  富坚老贼  阅读(252)  评论(0编辑  收藏  举报