枚举(Enum)定义
通常情况下,最好是在命名空间内直接定义枚举,以便该命名空间中的所有类都能够同样方便地访问它。 但是,还可以将枚举嵌套在类或结构中。现在的有些电商网站根据购物的积分用到的,金牌会员,银牌会员,铜牌会员。枚举值获值一般获取的时候包括获取变量和变量值,默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。直接使用Enum中的静态方法即可操作.GetValues中获取的是枚举变量的值,类型是枚举名,之后自动输出的是枚举名.每种枚举类型都有基础类型,该类型可以是除 char以外的任何整型(重点)。 枚举元素的默认基础类型为 int.准许使用的枚举类型有 byte、sbyte、short、ushort、int、uint、long 或 ulong。
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 enum Color
7 {
8 Red,
9 Green = 10,
10 Blue
11 }
12 class Program
13 {
14 static void Main(string[] args)
15 {
16 Console.WriteLine(StringFromColor(Color.Red));
17 Console.WriteLine(StringFromColor(Color.Green));
18 Console.WriteLine(StringFromColor(Color.Blue));
19 Console.Read();
20 }
21 static string StringFromColor(Color c)
22 {
23 switch (c)
24 {
25 case Color .Red :
26 return String.Format("Red = {0}", (int)c);
27 case Color.Green:
28 return String.Format("Green = {0}", (int)c);
29 case Color.Blue:
30 return String.Format("Blue = {0}", (int)c);
31 default
32 return "Invalid color";
33
34 }
35 }
36 }
View Code
接口:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace @interface
7 {
8 public interface IWindow
9 {
10 Object GetMenu();
11 }
12 public interface IRestaurant
13 {
14 Object GetMenu();
15 }
16
17 // 该类型继承自system.Object,并实现了IWindow和IRestaurant接口
18 public class GiuseppePizzaria : IWindow, IRestaurant
19 {
20 // 该方法包括了IWindow接口的GetMenu方法实现
21 Object IWindow.GetMenu()
22 {
23 return "IWindow.GetMenu";
24 }
25
26 // 该方法包括了IRestaurant接口的GetMenu方法实现
27 Object IRestaurant.GetMenu()
28 {
29 return "IRestaurant.GetMenu";
30 }
31
32 //这个GetMenu方法与接口没有任何关系
33 public Object GetMenu()
34 {
35 return "GiuseppePizzaria.GetMenu";
36 }
37
38 static void Main(string[] args)
39 {
40 // 构造一个实例类
41 GiuseppePizzaria gp = new GiuseppePizzaria();
42 Object menu;
43
44 //调用公有的GetMenu方法。使用GiuseppePizzaria引用,
45 // 显示接口成员将为私有方法,因此不可能被调用
46 menu = gp.GetMenu();
47 Console.WriteLine(menu);
48
49 //调用IWindow的GetMenu方法。使用IWindow引用,
50 // 因此只有IWindow.GetMenum方法被调用
51 menu = ((IWindow)gp).GetMenu();
52 Console.WriteLine(menu);
53
54 //调用IRestaurant的GetMenu方法。使用IRestaurant引用,
55 // 因此只有IRestaurant.GetMenum方法被调用
56 menu = ((IRestaurant)gp).GetMenu();
57 Console.WriteLine(menu);
58 Console.Read();
59 }
60 }
61 }
View Code
结构是值类型,类是引用类型:
结构使用的成员一般是数值,比如点、矩阵和颜色等轻量对象。值类型在堆栈上分配地址,引用类型在堆上分配地址。堆栈的执行效率要比堆的执行效率高,因此结构的效率高于类。原因在于,堆用完以后由.NET的垃圾收集器自动回收,程序中大量使用堆,将会导致程序性能下降。
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace Struct
7 {
8 struct MyStruct
9 {
10 // 定义字段x,y
11 public int x;
12 public int y;
13
14 // 定义构造函数
15 public MyStruct(int i, int j)
16 {
17 x = i;
18 y = j;
19 }
20 // 定义方法
21 public void Sum()
22 {
23 int sum = x + y;
24 Console.WriteLine("The sum is {0}", sum);
25 }
26 }
27 class Program
28 {
29 static void Main(string[] args)
30 {
31 MyStruct s1 = new MyStruct(1, 2);
32 MyStruct s2 = s1 ;
33 s1 .x = 2;
34 s1.Sum (); // the sum is 4
35 s2 .Sum (); //the sum is 3
36
37 MyStruct s3 = new MyStruct();
38 s3 .Sum (); // 0
39 }
40 }
41 }
View Code
迭代:
1 using System;
2 using System.Collections; //集合类的命名空间
3 using System.Collections.Generic;
4 using System.Linq;
5 using System.Text;
6
7 namespace CustomCollection
8 {
9 // 定义集合中的元素MyClass类
10 class MyClass
11 {
12 public string Name;
13 public int Age;
14 public MyClass(string name, int age) //代参构造函数
15 {
16 this.Name = name ;
17 this.Age = age;
18
19 }
20 }
21 public class Iterator : IEnumerator, IEnumerable // 实现接口IEnumerator和IEnumerable类Iterator
22 {
23 // 初始化MyClass类型的集合
24 private MyClass[] ClassArray;
25 int Cnt;
26 public Iterator()
27 {
28 // 使用带参构造器赋值
29 ClassArray = new MyClass[4];
30 ClassArray[0] = new MyClass("Kith", 23);
31 ClassArray[1] = new MyClass("Smith",30);
32 ClassArray[2] = new MyClass("Geo", 19);
33 ClassArray[3] = new MyClass("Greg", 14);
34 Cnt = -1;
35 }
36 //实现IEnumerator的Reset()方法
37 public void Reset()
38 {
39 //指向第一个元素之前,Cnt为-1,遍历是从0开始
40 Cnt = -1;
41 }
42 //实现IEnumerator的MoveNext()方法
43 public bool MoveNext()
44 {
45 return (++Cnt < ClassArray.Length);
46 }
47 //实现IEnumerator的Current属性
48 public object Current
49 {
50 get
51 {
52 return ClassArray[Cnt];
53 }
54 }
55 // 实现IEnumerable的GetEnumerator()方法
56 public IEnumerator GetEnumerator()
57 {
58 return (IEnumerator)this;
59 }
60 //}
61 // class Program
62 // {
63 static void Main(string[] args)
64 {
65 Iterator It = new Iterator();
66 // 像数组一样遍历集合
67 foreach (MyClass MY in It)
68 {
69 Console.WriteLine("Name:" + MY.Name.ToString());
70 Console.WriteLine("Age:" + MY.Age.ToString());
71
72 }
73 Console.Read();
74 }
75 }
76 }
View Code