C#中的枚举类型和结构体。
一、枚举类型
枚举类型使用enum定义:
// 枚举有值也有键。和数组类似,默认从0开始,依次加1. // 但是如果枚举中的几个元素被赋值,其之后的元素,都在其上加1 // :后边的类型是指定枚举中数值(键值)的类型,默认int public enum Weekdays : int { one = 3, two,//4 three,//5 four,//6 five,//7 six = 12, seven//13 } enum our { a = 1, b, c = 5, d, e }
枚举有值也有键。和数组类似,默认从0开始,依次加1.
但是如果枚举中的几个元素被赋值,其之后的元素,都在其上加1(原则上声明枚举不赋初始值)
:后边的类型是指定枚举中数值(键值)的类型,默认int
基本用法:实例
// 定义枚举类型的变量写法 Weekdays week = Weekdays.one; if (week == Weekdays.one || week == Weekdays.seven) { Console.WriteLine("你说的对"); } // 并无实际意义,只做展示。
一些语法我觉得和PHP的数组差不多:有key值,也有value。
将数值转换为枚举中对应的值
// 将数值转换为枚举中对应的值 Weekdays today; // 将3强制转换为枚举类型 today = (Weekdays)3; Console.WriteLine(today); // 输出one,
将枚举值转化为数值
Weekdays newtoday; newtoday = Weekdays.seven; int changetoday = (int)newtoday; Console.WriteLine(changetoday); // 输出13
枚举类型是可以用来计算的
// 枚举类型可计算 Weekdays yesDay; yesDay = Weekdays.three + 2; Console.WriteLine(yesDay); // 输出five /*枚举的计算属性*/ for (Weekdays i = Weekdays .one; i <= Weekdays .five; i++) { Console.WriteLine(i); // 7 }//*/ // 循环输出 one two three four five // 如果有的值是有默认值的情况下: our bb = our.d; Console.WriteLine((int)bb); // 输出6。这个没什么可说的
二、结构体:
官方给的C#结构体的特点:
1:结构可带有方法、字段、索引、属性、运算符方法和事件。(原则上不在结构体中声明方法)
2:结构可定义构造函数,但不能定义析构函数。但是,您不能为结构定义默认的构造函数。默认的构造函数是自动定义的,且不能被改变。
3:与类不同,结构不能继承其他的结构或类。
4:结构不能作为其他结构或类的基础结构。
5:结构可实现一个或多个接口。
6:结构成员不能指定为 abstract、virtual 或 protected。
7:当您使用 New 操作符创建一个结构对象时,会调用适当的构造函数来创建结构。与类不同,结构可以不使用 New 操作符即可被实例化。
8:如果不使用 New 操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使用。
结构体使用struct来定义:
// 定义一个学生结构体 struct student { public int xuhao; public int age; public string name; public string birthday; }
结构体把就好像是一个预定义的对象。需要使用的时候,实例化,赋值,调用就可以了。
结构体除了可以使用public定义变量之外,还可使用private定义变量。
// 定义一个学生结构体 struct student { private int xuhao; private int age; private string name; private string birthday; public void result(int t, int a, string s, string d) { xuhao = t; age = a; name = s; birthday = d; } public void display() { Console.WriteLine(name); } } static void Main(string[] args) { // 使用设定好的结构定义一个学生 /*gc.xuhao = 01; gc.age = 23; gc.name = "gc"; gc.birthday = "2019-01-18"; Console.WriteLine(gc); // 输出的值为:gc.Program+student Console.WriteLine(gc.name); // 输出gc//*/ student gc = new student(); gc.result(01, 23, "gc", "2019-01-18"); gc.display(); // 输出打印信息 gc }
测试使用完整代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace gc { class Program { public enum Weekdays : int { one = 3, two,//4 three,//5 four,//6 five,//7 six = 12, seven//13 } enum our { a = 1, b, c = 5, d, e } // 定义一个学生结构体 struct student { private int xuhao; private int age; private string name; private string birthday; public void result(int t, int a, string s, string d) { xuhao = t; age = a; name = s; birthday = d; } public void display() { Console.WriteLine(name); } } /* C#主要的运行函数,就是main函数 */ static void Main(string[] args) { // 定义枚举类型的变量写法 Weekdays week = Weekdays.one; if (week == Weekdays.one || week == Weekdays.seven) { Console.WriteLine("你说的对"); } Weekdays today; // 将3强制转换为枚举类型 today = (Weekdays)3; Console.WriteLine(today); // 输出one,将数值转换为枚举中对应的值 Weekdays newtoday; newtoday = Weekdays.seven; int changetoday = (int)newtoday; Console.WriteLine(changetoday); // 输出13 ,将枚举值转化为数值 // 枚举类型可计算 Weekdays yesDay; yesDay = Weekdays.three + 2; Console.WriteLine(yesDay); // 输出five /*枚举的计算属性*/ /*for (week i = week.one; i <= week.five; i++) { Console.WriteLine(i); }//*/ // 循环输出 one two three four five /*// 如果有的值是有默认值的情况下: our bb = our.d; Console.WriteLine((int)bb); // 输出6。这个没什么可说的//*/ // 使用设定好的结构定义一个学生 /*gc.xuhao = 01; gc.age = 23; gc.name = "gc"; gc.birthday = "2019-01-18"; Console.WriteLine(gc); // 输出的值为:gc.Program+student Console.WriteLine(gc.name); // 输出gc//*/ student gc = new student(); gc.result(01, 23, "gc", "2019-01-18"); gc.display(); // 输出打印信息 gc } } }