昨天没有复习C#,瞎忙了一天白鹭引擎项目,回到家已经是晚上九点了,好像九点也不算晚哈,想当年晚上10点还在工作室呆的不想回宿舍呢,但是昨天晚上我压根就不想打开电脑,因为!!!昨天某人惹我生气了!昨天没人给本小姐做饭!......其实根本原因还是因为毕业后真的太懒了,稍微努力一下就觉得自己太牛逼了。
刚刚忙完AR项目,赶紧复习复习我的C#......
一、枚举:enum,可在类内(默认private),也可在类外(默认public)
- 枚举是具有一组命名常量的独特的值类型,枚举中每个元素的基础类型是 int。所以枚举类型是可以用数学运算符进行运算的。
- 在类外定义枚举后,同一个命名空间的成员都可访问它;在类中定义后,如果在其它类要使用枚举,须将其声明为public或internal类型,并且通过“枚举所在类类名.枚举”形式使用。
- 枚举的格式:
{
枚举项1,枚举项2,…枚举项n
}
- 枚举的优点:
2.枚举使代码更清晰,允许用描述性的名称表示整数值,而不是用含义模糊的数来表示。
3.枚举使代码更易于输入。
- 枚举中不能定义数字。
- 做数学运算的时候,如果计算的范围超过了枚举范围,那么这个枚举类型变量将会变成一个数字。
enum Season
{
Spring = 1, Summer, Automn, Winter //默认从0开始
}
class MySeason
{
public void GetSeason(Season s)
{
switch (s)
{
case Season.Spring:
Console.WriteLine("美丽的春天");
break;
case Season.Summer:
Console.WriteLine("炎热的夏天");
break;
case Season.Automn:
Console.WriteLine("凉爽的秋天");
break;
case Season.Winter:
Console.WriteLine("寒冷的冬天");
break;
}
}
}
1.调用GetSeason()函数:
Season s = Season.Automn;
MySeason mySeason = new MySeason();
mySeason.GetSeason(s);
结果为:凉爽的秋天
2.值类型向枚举转换:
int i = 3;
Console.WriteLine((Season)i);
结果为:Winter
3.枚举向值类型转换:
for (s = Season.Spring; s <= Season.Winter; s++)
{
Console.WriteLine((int)s + ":" + s);
}
结果为:
1:Spring
2:Summer
3:Automn
4:Winter
4.字符串向枚举转换:
string w = "winter";
Season W= (Season)Enum.Parse(typeof(Season), w, true);
5.枚举转字符串:
Console.WriteLine("Method1:"+W.ToString());
string name = Enum.GetName(typeof(Season), W);
Console.WriteLine("Method2:" +name);
结果为:Method1:Winter
Method2:Winter
6.注意'+'运算符:
for (s = Season.Spring; s <= Season.Winter; s++)
{
Console.WriteLine((int)s + s);
}
结果为:
Summer
Winter
6
8
二、结构:struct,可以在类内(默认private),也可以在类外(默认internal)
- C#中结构类型和类类型在语法上非常相似,都可以包括数据成员和方法成员。
- 在类外定义结构后,同一个命名空间的成员都可访问它;在类中定义后,如果在其它类要使用结构,须将其声明为public或internal类型,并且通过“结构所在类类名.结构”形式使用。
- 结构的格式:
{
字段、属性、方法、事件
}
- 结构与类的区别
1.结构是值类型(栈),而类是引用类型(堆)。
2.栈工作效率比堆高,所以结构处理作为基类的小型对象,而类处理某个商业逻辑。
3.结构可以声明构造函数,但它们必须带参数,必须要给字段赋值。此时无参构造仍然存在。(结构不能
包含显式型无参数构造函数),而类中声明含参构造函数后,无参就不会存在。
4.一个结构不能从另一个结构或类继承,而且不能作为一个类的基类。结构不继承,不派生,但可实现接
口;类可继承可派生,可实现接口。
5.所有结构都直接继承自System.ValueType,类继承自System.Object。
6.结构中的字段不可以初始化,类中的字段可初始化,也可不初始化。
7.结构可以用new实例化,也可以不通过new实例化,只要给其字段赋值即可。类需要用new初始化。
struct Dog
{
public string name;
public Dog(string s)//带参构造函数,,此时无参构造也存在。
{
name = s;
}
public void Speak()
{
Console.WriteLine(name + "汪汪汪");
}
}
使用:
Dog dog;
dog.name = "妞妞";
dog.Speak();