C# 2010 从入门到精通 学习笔记6 第7章 创建并管理类和对象
本章内容
- 定义一个类,在其中包含一系列相互关联的方法和数据项
- 使用 public 和 private 关键字,控制类成员的可访问性
- 使用 new 关键字来创建对象并调用一个构造函数来初始化它
- 自己编写并调用构造函数
- 使用 static 关键字来创建可由同一个类的所有实例共享的方法和数据
7.1 理解分类
设计一个类的过程就是对信息进行分类,将相关信息放到一个有意义的实体中的过程。
7.2 封装的目的
定义一个类时,封装(Encapsulation)是一个重要原则。它的中心思想是:使用一个类的程序不应该关心类的内部实际如何工作。程序只需创建类的一个实例,然后调用类的方法。只要那些方法能做到它们宣称能做的事情,程序就不关心它们具体是如何实现的。
封装有时也称为信息隐藏(information hiding)。封装实际有以下两个目的:
1. 将方法和数据合并到一个类中;换言之,为了支持分类。
2. 控制对方法和数据的访问;换言之,为了控制类的使用。
1. 将方法和数据合并到一个类中;换言之,为了支持分类。
2. 控制对方法和数据的访问;换言之,为了控制类的使用。
7.3 定义并使用类
在 C#中,要用一个 class 关键字来定义一个新的类。类的数据和方法位于类的主体中(在两个大括号之间)。
注意:
Math 类包含了用于执行数学计算的方法,另外还用一些字段来定义了数学常量。其中,Math.PI 字段包含了值 3.14159265358979323846,这是π的近似值。
在 C#术语中,类中的变量称为字段(field)。
重要提示:
类和对象这两个术语不能混淆。类是一个类型的定义,对象则是该类型的一个实例,是在程序运行时才创建的。换言之,类是建筑蓝图,对象是按照这份蓝图来建造的房子。
7.4 控制可访问性
注意:C++程序员请注意,public 或 private 关键字之后不要添加冒号。在每个字段和方法声明中,都必须重复输入 public 或 private 关键字。
提示:类中的字段自动初始化为 0,false 或者 null,具体视类型而定。然而,作为一种良好的编程习惯,你应该显式地初始化字段。
重要提示:不要声明名称只是大小写有别的两个 public 类成员。否则,类就无法供对大小写不敏感的其他语言使用,比如 Microsoft Visual Basic。
7.5 使用构造函数
构造函数(constructor)是一种特殊的方法,它在创建类的一个实例时自动运行。它与类同名,能获取参数,但不能返回任何值(即使是 void)。每个类都必须至少有一个构造函数。如果不提供自己的构造函数,编译器会帮你自动生成一个默认构造函数。但是,编译器生成的默认构造函数不做任何实际的事情。默认构造函数非常好写——只需添加一个与类同名的 public 方法,不让它返回任何值就可以了。
注意:在 C#术语中,默认构造函数是指不获取任何参数的一个构造函数。至于是由编译器生成,还是由自己来写,则并不重要。同时还可以写一系列非默认构造函数(也就是要获取参数的构造函数)。
注意,构造函数被标识为 public。假如省略该关键字,构造函数将默认为 private(这和其他任何方法和字段是一样的)。private 构造函数不能在类的外部使用。
7.5.1 重载构造函数
注意:构造函数在类中的排列顺序是无关紧要的;可以随意采用任何顺序来定义它们。
使用C#语言时要注意:一旦为一个类写了任何构造函数,编译器就不再自动生成默认构造函数。
7.6 理解 static 方法和数据
事实上,并不是所有方法都必须通过类的实例来提供。这些“与众不同”的方法称为工具方法或者实用方法(utility method)。它们通常提供了一个有用的功能,而且这个功能独
立于任何具体的类的实例。
立于任何具体的类的实例。
在 static 方法中,不能访问类中定义的任何实例字段。相反,只能访问 static 字段。此外,只能直接调用类中的其他 static 方法;非 static 的方法(即实例方法)要求先创建一个对象,然后才能在那个对象上调用那些方法。
7.6.1 创建共享字段
你可以定义一个 static 字段,从而创建一个能在类的所有对象之间共享的字段(非 static 字段则局部于一个类的每个实例)。
提示:在 C#术语中,static 方法(静态方法)也叫做类方法(class method)。然而,static 字段(静态字段)通常不叫做类字段。相反,它们就叫做 static 字段,或者叫做 static 变量(静态变量)。
7.6.2 使用 const 关键字来创建 static 字段
有一种特殊的 static 字段,它的值是永远不会改变的,我们使用 const 关键字来声明这种字段。const 是“constant”(常量)的简称。const 字段虽然也是 static 字段,但在声明时不使用 static 关键字。