1。12 枚举(Enums) 
枚举声明为一组属性相同的常量定义一个统一的类别名字。它常用于一些在编译时已知范围的常量。但这些常量 
的具体值要在执行时才能确定。比如,已知三原色是红蓝绿,它们同属于颜色。可以定义如下:

*/ 
enum Color { 
         Red, 
         Blue, 
         Green 
 } 
 /*


我们创建一个shape(形体)类,每一个形体都会有颜色。颜色是属于“shape”的属性。但具体的颜色就要 
在执行时才能决定:

*/ 
 class Shape 
 { 
   public void Fill(Color color) { 
     switch(color) { 
     case Color.Red: 
       ... 
       break; 
     case Color.Blue: 
       ... 
       break; 
     case Color.Green: 
       ... 
       break; 
     default: 
       break; 
     } 
   } 
 } 
 /*


这个File方法地说明了如何将一种给定的颜色赋予shape类。枚举比起普通整数常量的优胜之处在于:它使得代 
码更容易阅读理解和更安全。枚举的常量可以由编译器决定。使用时编译器还可以检查它的有效性。枚举其实 
不是c#特有的。嘿嘿,我就不详细介绍喽。趁机投篮!如果有人感兴趣——自己看书!(为了避免香蕉吃的太多 
就介绍本书《c语言编程常见问题解答》清华1996。29.00人民币。虽然古老,俺在书店还能见到) 

1。13 名字空间(Namespaces) 
我们在前面已对namespace花了不少笔墨(俺都忘了该如何接上了!O.K.请大家看完再倒)。我们曾经说“i not 
like the hello world”。但是在程序中要经常说就会很累,如果要在别的代码中用就更繁了,这时可以用 
namespace搭救。我把第一个例子切开,代码如下:

*/ 
namespace MyOpinion 
 { 
   public class Message 
   { 
     public string GetMessage() { 
       return "i dont like Hello world"; 
     } 
   } 
 } /*


如果我想用namespace建立一个自己的库,就要对我的自定义函数和类进行分类,并填入相应的namespace中。 
如:

*/ 
 namespace Mylib.Csharp.MyOpinion 
 { 
   public class Message 
   { 
     public string GetMessage() { 
       return "i dont like Hello world"; 
     } 
   } 
 } 
 /*


namespace是分等级的,“Mylib.Csharp.MyOpinion”其实是缩写,每个“.”后面的namespace都被它前面的包 
含。如果拆开:

*/ 
namespace Mylib 
 { 
   namespace Csharp 
   { 
     namespace MyOpinion 
     {....} 
   } 
 }   
 /*


然后,我们就可以用自己的库了:

*/ 
using Mylib.Csharp.MyOpinion; 
 class test 
 { 
   static void Main() { 
     Message m = new Message(); 
     System.Console.WriteLine(m.GetMessage()); 
   } 
 } 
 /*

不过无论我们命名如何小心都会出现重名,即命名冲突。这时可以用别名来解决,比如上面的代码可以这样:*/ 

using MessageSource = Mylib.Csharp.MyOpinion; 
 class test 
 { 
   static void Main() { 
     MessageSource m = new MessageSource(); 
     System.Console.WriteLine(m.GetMessage()); 
   } 
 }

1.14 属性(Properties) 
关于属性就不用多说了。可能有点特别的是如何得到一个属性和设置一个属性。请诸位看下例:*/ 

public class Button: Control 
 { 
   private string caption; 
   public string Caption { 
     get { 
       return caption; 
     } 
     set { 
       caption = value; 
       Repaint(); 
     } 
   } 
 } 
 /*

有了上面的定义,我们就可以对Button进行读取和设置它的Caption属性:*/ 

Button b = new Button(); 
 b.Caption = "ABC";          // 设置 
 string s = b.Caption;       // 读取 
 b.Caption += "DEF”;        // 读取 & 设置