枚举
枚举类似于一种类,主要用于列举某种数据的所有取值。
简单枚举:enum名字{值1,值2,值3,值4}
enum MoveDirection : int //默认也为int
{
//****默认定义值****
Up, //=0
Down, //=1
Left, //=2
Right //=3
}
标志枚举:可以选择多个枚举值的枚举
条件:
1.任意多个枚举做 | 运算的结果,不能与其他枚举值相同。
2.使用 [Flags] 特性修饰。
以[Flags]为约定俗成的标志,故称为标志枚举,表示该枚举可以一次选取多个枚举值,增强代码的可读性。
语法:
[Flags]
enum 枚举类型名称
{
枚举值1 = 1,
枚举值2 = 2,
枚举值3 = 4,
枚举值4 = 8,
枚举值5 = 16,
……
}
二进制运算符:| &
按位或 |:对应的两个二进制位中,有一个为1,结果位为1。每一位都分别进行或运算。
按位与 &:对应的两个二进制位中,都一个为1,结果位为1。每一位都分别进行与运算。
例如:00000010 | 00010000 => 00010010
例如:判断00010010 包含 00000010
00010010 & 00000010 => 00000010
两种判断方法:
if((00010010 & 00000010)==00000010)
if((00010010 & 00000010)!=0)
PersonStyle.cs
enum PersonStyle
{ //无法满足条件1
//Tall=0, //00000000
//Rich = 1, //00000001
//Handsome = 2, //00000010
//White = 3, //00000011
//Beauty = 4 //00000100
Tall = 1, //00000001
Rich = 2, //00000010
Handsome = 4, //00000100
White = 8, //00001000
Beauty = 16 //00010000
}
program.cs
static void Main(string[] args)
{
PrintPersonStyle(PersonStyle.Tall|PersonStyle.Rich);
// 00000001 | 00000010
//数据类型转换:使用显示转换
//int => Enum
PersonStyle style01 = (PersonStyle)4;
//PrintPersonStyle(style01);
//PrintPersonStyle((PersonStyle)4);
//Enum => int
int enumnumber = (int)(PersonStyle.Beauty | PersonStyle.White);
//string => Enum
PersonStyle style02 = (PersonStyle)Enum.Parse(typeof(PersonStyle), "Rich");
//Enum => string
string strEnum = PersonStyle.Rich.ToString();
}
private static void PrintPersonStyle(PersonStyle style)
{ // 00000011
if ((style & PersonStyle.Tall) == PersonStyle.Tall)
Console.WriteLine("大个子");
if ((style & PersonStyle.Rich) == PersonStyle.Rich)
Console.WriteLine("土豪");
if ((style & PersonStyle.Handsome) != 0)
Console.WriteLine("帅气");
if ((style & PersonStyle.White) != 0)
Console.WriteLine("洁白");
if ((style & PersonStyle.Beauty) == PersonStyle.Beauty)
Console.WriteLine("漂亮");
}
类和对象
就当复习一下类的语法,虽然与c++有少许差别,但是内核是相同的。
访问级别 class 类名
{
字段:存储数据
属性:保护字段
构造函数:提供创建对象的方式,初始化类的数据成员
方法(函数):向类的外部提供某种功能
}
新知识点:属性
语法:
[访问修饰符] 数据类型属性名(一般是保护字段的单词的首字母大写形式)
{
get { return 字段;}
set { 字段= value; }
}
属性代替了两个函数,简化了代码,同时保护了数据
class Wife
{
//数据成员
//字段:存储数据
private string name;
//属性:保护字字段(本质2个方法GetName SetName)
public string Name
{
set //需要赋值时被调用
{ this.name = value; }
get //需要获取数据时执行
{ return name; }
//value : 要写入的数据(理解为:SetName的参数)
}
private int age;
public int Age
{
get
{ return this.age; }
set
{
if (value >= 18 && value <= 30)
this.age = value;
else
throw new Exception("我不要");//会报错
}
}
//构造函数
public Wife()
{
Console.WriteLine("创建对象就执行!");
}
public Wife(string name):this()
{
//this.name = name;//如果赋值给字段,那么属性是不会执行的。
this.Name=name;
}
public Wife(string name, int age) : this(name)
{
//Wife();
//this.Name = name;//如果赋值给字段,那么属性是不会执行的。
this.Age = age;
}
//方法成员
public void SetName(string name)
{
this.name = name;
}
public string GetName()
{
return this.name;
}
public void SetAge(int age)
{
if (age >= 18 && age <= 30)
this.age = age;
else
throw new Exception("我不要");
}
public int GetAge()
{
return this.age;
}
}
.
//声明 Wife类型的引用
Wife wife01;
//(不同点)指向Wife类型的对象(实例化对象)
wife01 = new Wife();
wife01.SetName("王美丽");
wife01.SetAge(18);
Console.WriteLine(wife01.GetName());
Console.WriteLine(wife01.GetAge());
Wife wife02 = wife01;//赋值引用
//wife02 = new Wife();
wife02.SetName("俊辰");
Console.WriteLine(wife01.GetName());//俊辰
//属性的作用
Wife wife03 = new Wife();
//wife03.SetAge(50);
//wife03.age = 60;
wife03.Name = "美丽";
wife03.Age = 20;
Console.WriteLine(wife03.Name);
Console.WriteLine(wife03.Age);
//调用第3个构造函数 --》 调用第2个构造函数--》 调用第1个构造函数
Wife wife04 = new Wife("美丽", 20);