初探c#--12,13,14
作者: 依栏望海[17731168] 2000-10-31 15:30:06 修改 删除 [回复]
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”; // 读取 & 设置