zoukankan      html  css  js  c++  java
  • (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

    .结构不能定义析构函数

  • 相关阅读:
    Java进阶学习(5)之设计原则(下)
    Java进阶学习(5)之设计原则(上)
    Java进阶学习(4)之继承与多态(下)
    Java进阶学习(4)之继承与多态(上)
    Java进阶学习(4)之继承与多态.demo
    python自动更新升级失败解决方案
    信息检索
    对卷积神经网络原理理解
    对DensePose: Dense Human Pose Estimation In The Wild的理解
    Java进阶学习(3)之对象容器.小练习
  • 原文地址:https://www.cnblogs.com/buchizaodian/p/5613697.html
Copyright © 2011-2022 走看看