一.简单枚举
![v2-9cc130f5937272db17b7fd0ab3363408_b.jpg](https://img-blog.csdnimg.cn/img_convert/20557d1ca0bcf35437cfca88ee557e29.png)
语法:(相当于给整型加标签)
//声明时:
enum moveD:int //:int不写也行,默认就是int
{
Up=0,//后面的值不写也行,默认就是从0开始计数
Down=1,
left=2,
down=3
}
//传参时:
private static void Moveto(moveD move){
}
//调用时:
Moveto(moveD.Down);
二.标志枚举(以及按位运算符) //可多选
相当于标志位法,每个二进制位数代表一个属性
语法:
创建:
[Flags] //可以多选的标志位!!!!
enum personStyle:int{
tall=1,
rich=2,
handsome=4 //每个枚举值实际占2进制中的1位
}
传参给方法后判断:("按位与"判断)
private static void PrintStyle(personStyle man){
if((man & personStyle.tall)!=0){ //其实就是在判断标志位上的数值
Console.WriteLine("高个子");
}
if((man & personStyle.rich)!=0){ //也可以写成:(man & personStyle.rich)== personStyle.rich
Console.WriteLine("土豪");
}
if((man & personStyle.handsome)!=0){
Console.WriteLine("帅哥");
}
}
调用:("按位或"调用)
PrintStyle(personStyle.handsome|personStyle.tall); //00000101
三.枚举的强制类型转换
int转enum enum转int 都需要强转;
string转Enum: (personStyle)Enum.Parse(typeof(personStyle),"handsome");//用Enum.Parse(类型,字符串)转换成object,再强转成personStyle
Enum转string: tostring(); personStyle.handsome.tostring();
传参时想传 枚举索引值 或者 字符串 也可以,只需要强转一下类型:
//枚举传法
PrintStyle(personStyle.handsome);
//枚举索引值传法
PrintStyle((personStyle)4);
//字符串传法
PrintStyle((personStyle)Enum.Parse(typeof(personStyle),"handsome"));//用Enum.Parse(类型,字符串)转换成object,再强转成personStyle
四.类和对象
1, 创建类
![v2-3586255ceca270dbca9a5f2e356b4446_b.jpg](https://img-blog.csdnimg.cn/img_convert/521d59933e7c0642298399ecfa82e96c.png)
//例子
using System;
namespace VSc04
{
class Wife
{
private string name;
private int age;
public void SetName(string name){
this.name=name;
}
public string GetName(){
return name;
}
public void SetAge(int age){
this.age=age;
}
public int GetAge(){
return age;
}
}
}
2. 创建类的实例对象
static void Main(string[] args)
{
Wife myWife=new Wife();
myWife.SetAge(18);
myWife.SetName("如花");
Console.WriteLine(myWife.GetName());
Console.WriteLine(myWife.GetAge());
}
3. 访问修饰符
private 私有 //变量私有化可以在类中控制参数范围等...,比较灵活 但需要读写两个公开方法来读写 由此引出:字段
public 公有
4. 字段属性(对private 的变量)
private string name; //字段
public string Name{ //字段属性
get{return name;}//读取时保护,可以写一系列筛选代码
set{this.name=value;}//写入时保护,可以写一系列筛选代码
}
引用时
myWife.Name="冰冰";
字段属性
![v2-ac406b19e34699227658257ce391c18c_b.jpg](https://img-blog.csdnimg.cn/img_convert/d61dca089529e524f8a5beeaabc347a5.png)
自动属性 (快捷输入:prop)
自动属性是对上述字段属性的简写(自动生成一个字段和两个方法) 此写法和上面的写法功能一致.自动生成的字段不可访问.所以,区别是
1'类中如何访问该默认字段呢??看来在类中也只能用get 和set方法访问了.
2'如果要设置get set的具体逻辑,那么自动属性就不合适了
![v2-cc3b17d255b31b40aada8c91fa62e6e1_b.jpg](https://img-blog.csdnimg.cn/img_convert/094f42e7bbf499763e1627af6370cf65.png)
这样写优点:
![v2-d738f4055c47f8f5ec7fea2cf742e0d0_b.jpg](https://img-blog.csdnimg.cn/img_convert/4d029c5751d34cd9179e5886e4e6950f.png)
5.构造函数
![v2-159b599b7b5e88e0d1b5ee8afc9a3d32_b.jpg](https://img-blog.csdnimg.cn/img_convert/610da8b8bfd47e55b7d5e261644b8649.png)
![v2-813bdd54e2674730c96e1496e4d3b31c_b.png](https://img-blog.csdnimg.cn/img_convert/09cd440e6fc503fdcb4596fe081b8114.png)
调用某个构造函数的同时调用其他构造函数 //:this()
![v2-473dc9e20d8b1560576899ade706422b_b.jpg](https://img-blog.csdnimg.cn/img_convert/d09391df283ddb8b9c66e90789777a3c.png)
构造函数特点:
![v2-e1405b23cac00efa935ff9399f76bb54_b.jpg](https://img-blog.csdnimg.cn/img_convert/8e70abb168a1c69f2931eaa2fe98234a.png)
6. this关键字
![v2-2d1645fd954c5c4731c091b5ec98ccd3_b.jpg](https://img-blog.csdnimg.cn/img_convert/449b52622360e31b6e8f416d515b068c.png)