5.2类类是面向对象程序设计的基本构成模块。从定义上讲,一个类就是一个数据结构,它包括数据成员(常量,域和事件),成员函数(方法、属性、索引、操作符、构造函数和析构函数)及嵌套类型。类类型支持继承,它使派生类可以对基类进行扩展和专用化。
5.2.1类的声明一个类在程序中使用之前,必须已经声明过。声明是为了让程序知道有这个类的存在。在c#中用"class”关键字来声明一个类。声明类的语法如下所示:
[访问修饰符] class 类名称[:父类名]
{
[成员修饰符]类的成员变量或者成员函数
}
类声明由声明头和类体组成。在声明头中,首先指定类的属性和修饰符,然后是class关键字和类的名称,接着是基类(可选)及该类实现的接口。声明头后面是类体,它由一组位于一个花括号”{}”之间的成员声明组成。
■ [访问修饰行]:用于对类进行修饰,说明类的特性。允许使用的访问修饰符包括public,private,protected,internal,protected internal等。
■ class:声明类时的关键字。
■ 类名称:自定义的类的名称,该名称要符合标识符定义的要求。
■ 父类名:表示被继承的名称,“父类名”可以省略,如果没有父类名,则默认从Object类继承而来。“父类名”也可以是接口,一个类可以继承多个接口,若存在两个或两个以上的接口,各接口之间应该用逗号分开。
类与类之间只能是单继承,但类可以在同时继承一个父类与一个或者多个接口。在C#语言中,由于所有类都是从Object类派生出来的,因此,Object类被称为每个类的祖先类。如果在类的声明中,既有父类又有接口类,则要把父类放在冒号后面的第一项,然后再放接口名。如下面的示例中,定义了一个名为”Program”的类。默认地,类会被声明为”internal”,意味着在同一个项目里所有的代码都可以访问这个类。
namespace WindowsApplication //声明命名空间
class Program //声明类
{
public Program()
{
……
}
//类的成员和方法
}
如果使用public关键字来声明类,那么其它项目中的代码也是可以访问这个类的。从上面的代码中可以看出,一个类的创建需要三部分:命名空间,声明类和构造函数。命名空间主要是区别不同程序集中的类,一般便于大型应用项目中不同程序集之间的调用;构造函数是定义类时必须创建的函数。即使在代码中不创建显式的创建构造函数,程序也会默认有一个不带任何参数的构造函数。构造函数相当于类的初始化,函数名必须和类名相同。
5.2.2类的修饰符在类的声明头中可以使用的类的修饰符为new,public.protected、internal、private,abstract及sealed。下面对修饰符进行说明,如,表5.1所示。
类的修饰符可以是以上几种之一或者是它们的组合(在类的声明中同一修饰符不允许出现多次,但protected,internal组合除外)。如果在一个类声明中多次出现同一修饰符,则编译时会出现错误。其中internal,private,protected和public关键字声明对类的访问属性。在命名空间中声明的类只能有public或internal访问属性。嵌套类(在另一个类中定义的类)可以具有以上四种访问类型中的一种,还可以有protected internal访问类型,它等效于“受保护的或内部的”访问。
例5.1:创建一个类库项目,定义一个公共类Quad并生成DLL文件,然后创建一个控制台应用程序项目,添加对DLL程序集的引用,并在Program类的Main方法中创建Qual类的实例(Ch05Ex01)。
首先从定义一个公共类Quad并生成DLL文件开始,其方法如下:
(1)在Visual C# 2010中单击[File]→[New Project],出现如图5.l所示的“添加新项目”对话框。
(2)在代码编辑器中打开源文件Quad.cs,加入如下内容,以下代码是计算一个长方形的面积:
namespace QuadLibrary //声明命名空间
{
public class Quad //声明公共类Quad作为命名空间的成员
{
private double width=0.0; //声明私有的成员函数。
private double heght=0.0; //声明私有的成员函数。
public Quad(double w,double h) //构造函数
{
widht=w;
height=h;
}
public double GetQuadArea() //返回面积
{
return width*height;
}
}
}
(3)单击[Build] → [Build QuadLibrary]命令,或者按“Shm+F6”组合键,以编译项目生成DLL文件。
(4)在解决方案中添加一个控制台应用程序项目,项目名为"Ch05Ex01",并在解决方案资源管理器中右击项目"Ch05Ex01”,然后单击快捷菜单中的[Add Refennce]命令,显示“添加引用”对话框,如图5.2所示。
(5)打开[Browse]选项卡,然后定位到前面项目所在路径的\bin\Debug文件夹,选择QuadLibrary.dll文件,再单击【确定】按钮。此时在解决方案资源管理器中将出现对命名空间QuadLibrary的引用,图5.3所示。
(6)在代码编辑器中打开源文件Program.cs,加入如下内容:
using System;
using QuadLibrary; //声明加入的命名空间QuadLibrary
namespace Ch05Ex01
{
class Program
{
static void Main(string[] args)
{
Quad quad=new Quad(2.0,3.00); //创建一个Quad类实例
Console.WriteLine(“Area is :{0}”,quad.GetQuadArea());
}
}
}
(7)可按“Ctrl+F5”组合键编译并运行程序,最后程序的结果如图5.4 所示。
如果我们把Quad类的访问类型改为默认类型即;internal.再重新编译为DLL文件,这时在Program类中使用Quad类的一个实例时,会得到错误信息。这是因为Quad类和Program类位于不同的程序集中,而且Quad类是内部访问方式,所以Program类不能访问它。1