C# Lesson 04 : C#自定义类型(枚举、结构)和转换

0 开篇

为啥要有自定义类型,就是说基本的char,short……double等不满足使用需求,就有个自定义类型。自定义类型不是瞎定义类型。也是有规则的

自定义类型变量无法像定义一个整型数据那样 直接int a;

需要先定义好类型,再定义变量

1 枚举类型

1.1 先定义它个枚举类型

enum 枚举类型的名称 [:数据类型]

    成员名称1 [= 起始值]

    成员名称2 [= 起始值]

    。

    。

    。
};

  1.  必须以关键字enum开头;
  2. 枚举类型的数据类型只能是byte、short、int、long,默认为int;
  3. 枚举和结构类型的首字母必须要大写;
  4. 定义的枚举成员必须要将成员的常数值初始化,所以你不能像 int a 一样 enum a,那样就失去自定义的意义了;
  5. 若未指定常数值的话直接默认从0开始;
  6. 定义了枚举类型的成员之后,可以直接使用“枚举类型的名称.成员名称”来调用成员。

1.2 枚举变量的使用

枚举变量的使用分为三步走:

step 1 : 先定义枚举类型

step 2 : 声明枚举变量,赋值

step 3 : 类型转化输出

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace Lesson04
{
    //step 1:先定义枚举类型
    enum Location       //通常在命名空间下定义枚举变量
    {
        east = 11,west,south,winter
    };
    class Program
    {
        enum AFamily        //也可以在类程序下声明
        {
            father,
            mother = 2,
            sun = 1,
            flower = 4 
        };
        static void Main(string[] args)
        {
            //step 2:声明并赋值(存储枚举成员)

            AFamily Zhangsan;
            Zhangsan = AFamily.sun;

            Location MyWhere = Location.east;

            WriteLine("{0}", Location.east);
            WriteLine("{0}", MyWhere);
            WriteLine($"{Zhangsan}");

            //step:强制转化
            WriteLine("{0}", (int)Location.east);
            WriteLine("{0}", (int)MyWhere);
            WriteLine($"{(int)Zhangsan}");

            ReadKey();
        }
            
    }
}

2、结构

枚举变量是以byte、short、int、long为数据类型的整数组合,为了解决不同的数据类型问题,又有了自定义结构类型。

从而解决不同类型的数据项。语法如下:

[AccessModifier] struct 结构名称

{

     数据类型 成员名称1;

     数据类型 成员名称2;

}

  1. AccessModifier 是存储权限修饰词,设置存储范围,包含public、private等。
  2. 结构的级别和类一致,写在命名空间下面。
  3. 结构中的字段不能赋初始值。
  4. 结构是值类型。
  5. 首字母要大写

C# Lesson 04 : C#自定义类型(枚举、结构)和转换_第1张图片

using static System.Console;

namespace Lesson04B
{
    struct Computer
    {
        public int price;
        public string serial;
        public DateTime madDate;
    }
    class Program
    {
        static void Main(string[] args)
        {
            Computer personPC;
            personPC.price = 6_750;
            personPC.madDate = DateTime.Today;
            personPC.serial = "zct-123456B";
            WriteLine($"{personPC.price:c0}" + "\n" +
                $"{personPC.madDate:D}" + "\n" +
                $"{personPC.serial}");
            ReadKey();

        }
    }

3、隐式类型转换

隐式类型转换是指程序运行过程中根据数据的表示范围,自动将范围小的数据转化为和表示范围大的数据类型看齐

转换的方式又分为无符号和有符号数值转换

using static System.Console;

namespace Lesson4C
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 10;
            float b = 1.1f;
            float c = a + b;
            WriteLine($"{a+b}");
            ReadKey();
        }
    }
}

4、显式类型转换

  1. 用转化运算符(),如(int)3.14;
  2. 使用Parse(),比如 float.Parse(3)
  3. 使用convert类

4.1 Convert与Parse的区别

1)对NULL值的处理方法
Convert.ToInt32(NULL)返回0,不会抛出异常

Int.Parse(NULL)会抛出异常


2)适用范围
Convert可以提供多种类型的转换

Parse只能提供string类型的转换

3)对数值的处理
Convert.ToInt32(double value)

如果value为两个整数之间的数字,则返回二者中的整数,例如3.5返回的是数值是4,4.5返回的数值是4,5.5返回的是6;但是3.6返回的是4,4.3返回的是4,5.3返回的是5,5.7返回的是6

int.Parse(double value)

抛出异常“输入的字符串格式不对”

 

 

你可能感兴趣的:(编程)