Day12_复杂数据类型_常量_枚举_结构
主要内容
- 小复习
- 常量
- 枚举
- 结构
小复习
-
常见变量类型
- int/double/string/char/bool/decimal
-
变量使用规则:
- 声明$\rightarrow$赋值$\rightarrow$使用
-
命名规则
- Camel 和 Pascal
-
运算符
- 赋值: =
- 复合赋值: += -= *= /= %=
- 算数: + - * / % ++ –
- 关系: > < >= <= == !=
- 逻辑: && || !
-
语法结构
- 分支结构: if if-else
- 选择结构: while do-while for
常量
- 区别于变量, 常量是恒定的值, 不能被重新赋值
- 语法:
const 数据类型 常量名称 = 初始赋值;
- 特点:
- 不能被重新赋值
枚举
- 语法:
[public] enum 枚举名
{
值1,
值2,
...
}
-
语法解释
- []中括号代表可以省略(别把中括号写出来!)
- public是访问修饰符. public是权限最高(或者也可以说是没有权限), 任何地方都可以访问(与private相对比)
- enum是关键字, 用于声明枚举(其缩写为 Enumerate)
- 枚举名要符合Pascal命名规范
-
意义
例如学员管理时, 要定义性别
不同程序员命名时, 可能出现如下情况char gender = ‘男’;
string s1 = “female”;
bool b = true;为了统一样式, 可以将枚举声明在 命名空间内 & 类的外面
使得所有的类都是用统一的变量类型
-
特点:
- enum同int等变量类型一致, 都是用于存储数据
- 区别仅在于变量的使用方式
- 相当于自定义一种变量类型
- 注意是点(.) 出来的
-
实例
namespace NAME
{
public enum Seasons
{
春,
夏,
秋,
冬
}
class class1
{
static ... Main ...
{
Season thisMonth = Seasons.夏
// 最后输出的就是"夏"
}
}
}
枚举类型和int/string类型之间的转换
- 枚举类型默认可以和int类型互相转换
- 即, 两者兼容
public enum QQstate
{
OnLine,
OffLine,
Leave = 9,
Busy,
QMe
}
- 枚举类型转换int类型
QQstate state = QQstate.OnLine;
int n = (int)state//隐式转换
Console.WriteLine(n);
Console.WriteLine((int)QQstate.OffLine);
Console.WriteLine((int)QQstate.Leave);
Console.WriteLine((int)QQstate.Busy);
Console.WriteLine((int)QQstate.QMe);
结果为
0 1 9 10 11
- int转换枚举类型
int n1 = 1
QQstate state = (QQstate)n1;
Console.WriteLine(state);
Console.WriteLine((QQstate)8);
结果为
OffLine 8
注意隐式失败不报错
-
注意: 所有类型都能转为string类型
-
调用
.toString()
就可以 -
字符串string转换为枚举类型较为麻烦
-
因为两者不兼容
-
此时应当调用
Enum.parse(string1)
string s1 = "3";
string s2 = "夏";
string s3 = "99";
string s4 = "夏天";
Season month1 = (Season)Enum.Parse(typeof(Season), s1);
Season month2 = (Season)Enum.Parse(typeof(Season), s2);
Season month3 = (Season)Enum.Parse(typeof(Season), s3);
Season month4 = (Season)Enum.Parse(typeof(Season), s4);
Console.WriteLine(month1);
Console.WriteLine(month2);
Console.WriteLine(month3);
Console.WriteLine(month4);
结果很amazing
1: 冬
2: 夏
3: 99
4: 抛异常
- 注意: 数字不能转换返回数字本身; 文本不对应就会抛异常
结构
大学管理系统
要求数据: 姓名 性别 年龄 年级
问题是: 需要上千个变量
- 意义: 结构可以一次性声明多个变量
- 语法:
[public] struct 结构名
{
成员;//可以理解为变量
}
- 注意: 放置的位置和枚举enum一样
- 举例:
public struct Person
{
public string _name;//成为字段
public int _age;
public char _gender;
}
Person zsPerson;
zsPerson._name = "张三";
zsPerson._age = 21;
zsPerson._gender = '男';
Person lsPerson;
lsPerson._name = "李四";
lsPerson._age = 22;
lsPerson._gender = '男';
即 面向对象 编程(现在只能说很类似)
- 字段 与 变量 最本质的区别
- 变量在程序运行的过程中, 只能存放一个值
- 字段可以存储多个值
- 注意: 字段命名时一定记得加下划线
练习
- 给定一个叫MyColor的结构, 包含三个int成员red, blue, green
- 声明一个MyColor类型的变量, 为其成员赋值, 使之表示红色
public struct Mycolor
{
public int _red;
public int _green;
public int _blue;
}
class Class1
{
static void Main(string[] args)
{ //代码从这里走起
Mycolor mc;
mc._red = 255;
mc._green = 0;
mc._blue = 0;
}
}
感想: 看似复杂无意义, 实际上是为了规范而发明的
当所有成员的代码组合起来的时候, 规范才有了意义
团队是合作的, 而非个人solo