在 C#中,类包含若干个组成成员,这些组成成员包括
字段、属性、方法、事件等,
这些组成成员能 够彼此协调用于对象的深入描述。
1.字段 “字段”是包含在类中的对象的值, 字段使类可以封装数据, 字段的存储可以满足类设计中所需要描述。
例如在 Animal 类中的字段 color,就是用来描述动物的颜色。当然, Animal 的特性不只颜色, 可以声明多个字段描述 Animal 类的对象,示例代码如下所示。
class Animal { public string color; //声明颜色字段
public bool haveFeather; //声明是否含有羽毛字段 public int age; //年龄字段 }上述代码中,对 Animal 类声明了另外两个字段,用来描述是否有羽毛和年龄。当需要访问该类的字 段的时候,需要声明对象,并使用点“.”操作符实现,Visual Studio 2008 中对“.”操作符有智能提示功 能,示例代码如下所示。
Animal bird = new Animal(); //创建对象
bird.haveFeather = true; //鸟有羽毛 bird.color = "black"; //这是一只黑色的鸟2.属性 C#中,属性是类中可以像类的字段一样访问的方法。属性可以为字段提供保护,避免字段在用户创建的对象不知情的情况下下被更改。属性机制非常灵活,提供了读取、编写或计算私有字段的值, 可以像公共数据成员一样使用属性。
在 C#中,它们被称为“访问器”,为 C#应用程序中类的成员的访问提供安全性保障。当一个字段的 权限为私有(private)时,不能通过对象的“.”操作来访问,但是可以通过“访问器”来访问,示例代码 如下所示。
public class Animal { private int _age; //定义私有变量
public int Age {get { return _age; }
set { _age = value; }} //赋值属性 }
上述代码中为 Animal 类声明了一个属性 Age,在主程序中,同样可以通过“.”操作符来访问属性,示 例代码如下所示。
Animal bird = new Animal(); //创建对象
bird.Age = 1; //Age 访问了_age在 Visual Studio 2008 中,属性的声明被简化,不再需要冗长的声明,示例代码如下所示。
public class Animal //创建类
{ public int Age
{ get; set; } //简便的属性编写 }注意:虽然在 VS2008 中,简化了代码,但是实现的过程依旧没有改变。
3.方法 方法用来执行类的操作,方法是一段小的代码块。在 C#中,方法接收输入的数据参数,并通过参数 执行函数体,返回所需的函数值,方法的语法如下所示。
私有级别 返回类型 方法名称(参数 1,参数 2) { 方法代码块。 }
方法在类中声明。对方法的声明,需要指定访问级别、返回值、方法名称以及任何必要的参数。参 数在方法名称后的括号中,多个参数用逗号分割,空括号表示无参数,示例代码如下所示。 public string output() //一个无参数传递的方法
{ return "没有任何参数"; //返回字符串值 }public string out_put(string output) //一个有参数传递的方法
{ return output; //返回参数的值 }上述代码中,创建了两个方法,一个是无参数传递方法 output 和一个参数传递的方out_put,在 主函数中可以调用该方法,调用代码如下所示。
Animal bird = new Animal(); //创建对象
bird.out_put(); //使用无参数的方法 string str = "我是一只鸟"; //创建字符串用于参数传递 bird.out_put(str); //使用有参数的方法如上述代码所示,主函数调用了一个方法 out_put,并传递了参数“我是一只鸟”。在使用类中的方法 前,将“我是一只鸟”赋值给变量 str,传递给 out_put 函数。在上述代码中,“我是一只鸟”或者 str 都 可以作为参数。 在应用程序开发中,方法和方法之间也可以互相传递参数,一个方法可以作为另一个方法的参数, 方法的参数还可以作为另一个方法的返回值,示例代码如下所示。
public string output() //一个无参数传递的方法
{ return "没有任何参数"; //返回字符串 } public string out_put() //使用其他方法返回值的方法 { string str = output(); //使用另一个方法的返回值 return str; //返回方法的返回值 }如上述代码所示,out_put 使用了 output 方法,output 返回一个字符串“没有任何参数”。在 out_put 方法中,使用了 output 方法,并将 output 方法的返回值赋给 str 局部变量,并返回局部变量。在方 法的编写中,方法和方法之间可以使用同一个变量而互不影响,因为方法内部的变量是局部变量, 示例代码如下所示。
public string output() //一个无参数传递的方法
{ string str = "没有任何参数"; //声明局部变量 str return str; //使用局部变量 str } public string out_put() //一个无参数传递的方法 { string str = "还是没有任何参数"; //声明局部变量 str return str; //使用局部变量 str}如上述代码所示,output 和 out_put 方法都没有任何参数,但是却使用了同一个变量 str。str 是局部 变量,str 的作用范围都在该变量声明的方法内,称作“作用域”。创建了一个方法,就必须指定该方 法是否有返回值。如果有返回值,则必须指定返回值的类型,示例代码如下所示。
public int sum(int number1, int number2) //必须返回 int 类型的值
{ return number1 + number2; //返回一个 int 类型的值 } public void newsum(int number1, int number2) //void 表示无返回值 { int sum = number1 + number2; //没有返回值则不能返回值 }上述代码中,声明了两个方法,分别为 sum 和 newsum。sum 方法中,声明了该方法是共有的返回 值为 int 的方法,而 newsum 方法声明了是共有的无返回值方法。
4.事件 事件是一个对象向其他对象提供有关事件发生的通知的一种方式。在 C#中,事件是使用委托来定义 和触发的。类或对象可以通过事件向其他类或对象通知发生的相关事情。发送或引发事件的类称为 “发行者”, 接收或处理事件的类称为“订阅者”。 例如在 Web Form 中双击按钮的过程, 就是一个事件, 控件并不对过程做描述,只是负责通知一个事件是否发生。事件具有以下特点: 事件通常使用委托事件处理程序进行声明。 事件始终通知对象消息并指示需要执行某种操作的一种方式。 发行者确定何时引发事件,订阅者确定执行何种操作来响应该事件。 一个事件可以有多个订阅者。一个订阅者可处理来自多个发行者的多个事件。 没有订阅者的事件永远不会被调用。 事件通常用于通知用户操作,例如,图形用户界面中的按钮单击或菜单选择操作。 如果一个事件有多个订阅者,当引发该事件时,会同步调用多个事件处理程序,也可以使用异步处 理多个事件。 声明委托和事件的示例代码如下所示。
public delegate void AnimalEventHandler(); //声明委托
public class Animal//创建类 { public event AnimalEventHandler OnFly; //声明事件 public void Fly() //创建类的方法 { OnFly(); //使用事件 } }上述代码定义了一个委托,并针对相关委托声明了一个方法。关于委托和事件,会在后面的章节中 讲到,上述代码在主函数调用代码如下所示。
Animal bird = new Animal(); //创建对象
bird.OnFly += new AnimalEventHandler(TestAnimal); //注册事件 bird.Fly(); //使用方法