5.2.3
类的成员类中的数据和函数都称为类的成员。类的成员可以分为两大类:一类是类本身所声明的,另一类是从基类中继承而来的。如果在类声明中未指定基类,则该类将继承System.Object类的所有成员。类的成员主要分为表5.2所示的几种类别。
在声明类成员时,应遵循以下规则:
■ 实例构造函数,静态构造函数和析构函数名必须与类名相同,所有其他成员名必须与该类名不同。
■ 常数,字段,属性,事件或类型的名称必须不同于在同一个类中声明的所有其他成员的名称。
■ 方法的名称必须不同于在同一个类中声声明的所有其他非方法的名称。
■ 方法/实例构造函数,索引器,运算符的签名必须不同于在同一个类中声明的所有其它办法,实例构造函数,索引器,运算符的签名。
注意:
类的继承成员不是类的声明空间组成部分。因此,派生类可以使用与所继承的成员相同的名称或鉴名来声明自己的新成员。
在类的声明中,对类成员可以使用表5.3的访问修饰符来指定访问级别。
当使用static修饰符时,声明的是静态成员。静态成员属于整个类所有,被该类的所有实例所共享,无论这个类创建了多少个副本,一个静态成员在内存中只占一块区域,而不会重复创建多个副本。静态成员可通过类名和成员名来访问静态成员,类名与成员名之间用贺点“.”分隔,不必创建类的实例。
[例5.2]:创建一个控制台应用程序项目,声明一个Person类并为这个类声明一些类成员,通过限定类成员的访问级别来说明一下类的成员的访问修饰符的用法(Ch05Ex02)。
(1)首先新建一个控制台应用程序项目,在代码编辑器中打开源文件Program.cs。在命名空间中声明一个内部类Person,代码如下:
public class Person //定义一个Person类
{
public int ID; //公有成员:ID
protected int age; //保护成员:age
private string name; //私有成员:name
public static int count; //静态成员:count
public Person(string name,int age) //公共成员,类的构造函数
{
this.name=name; //正确,允许访问自身成员
this.age=age; //正确,允许访问自身成员
count++; //正确,允许访问自身成员
}
public void ShowPersonInfo() //公共方法成员
{
Console.WriteLine(“Name:{0}\t Age:{1}”,name,age); //正确,允许访问自身成员
}
}
(2) 在Program类的Main方法中编写以下代码:
Person person1=new Person(“Jack”,20); //创建一个Person类的对象person1
person1.ID=001; //正确,允许访问person1的公有成员
//person1.age=30; //错误,不允许访问person1的保护成员
//person1.name=”unknown”; //错误,不允许访问person1的私有成员
person1.ShowPersonInfo(); //正确,允许访问person1的公有函数成员
Console.WriteLine(“count:[0]”,Person.count); //正确,允许通过类名来访问静态成员
(3)可按“Ctrl+F5”组合键编译井运行程序,最后程序的结果如图5.5所示。
在上面的示例中,Person类的构造函数我们用到了
this保留字。this保留字一般仅限于在构造函数的方法和类的实例中使用,下面列出了this留字在不同地方的运用。
■ 如果在类的构造函数中出现,则把this作为一个值类型,它表示对正在构造的对象本身的引用。
■ 如果在类的方法中出现this保留字,则可以把它作为一个值类型,表示对调用该方法的对象的引用。
■ 如果在结构的构造函数中出现this保留字,则可把它作为一个变量类型,表示对调用该方法的结构的引用。
■ 如果在其他地方出现this保留字,则都是不合法的。
5.2.4
类的实例上面创建了类,并设置了类的属性和方法,下面我们就要创建类的实例,并在程序中调用这个类的一些方法和属性。实例其实就是类的对象,其声明一般是在定义了类之后进行的,声明对象后便可以访问对象成员。为了使对象在内存中分配到保存数据的空间,在声明对象后,常常需要使用关键字new对对象进行实例化操作,其语法格式为:
类名 对象名。
对象名=new 类名()
其中new关键字的作用是调用一个构造函数,通过传递给构造函数的参数来初始化实例的数据成员。有些类可能没有可访问的构造函数,这种情况下就不能用构造函数来实例化该对象。而这些对象的实例一般是在NET Framework的方法内部创建,这些方法返回对类实例的引用。如前面创建的Person类,这个类没有具体指某一个人。我们为Person类创建一个实例,就是指具体化到某个人。如下面的代码演示了在应用程序中创建Person类的实例,并设置对象的属性。
Person personl= new Person(“Jack",20); //创建一个Person类的对象personl.其名字是jack,年龄为20
peronl.ID= 001; //设置对象的ID属性为001
上面的代码创建了Person这个类的一个具体实例,井设置了相关属性,下面的的代码演示调用这个对象的方法:
person1.ShowPersonInfo(); //显示personl对象的相关信息
由此可以看出,对象访问对象的成员要使用“.”运算符来实现。n