zhyDaDa的个人站点

Day12_复杂数据类型_常量_枚举_结构

study

主要内容

  • 小复习
  • 常量
  • 枚举
  • 结构

小复习

  • 常见变量类型
  • 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

Avatar photo
我是 zhyDaDa

前端/UI/交互/独立游戏/JPOP/电吉他/游戏配乐/网球/纸牌魔术

发表回复