C#Doorstep2面向对象程序设计篇
--类成员的可访问性(private,protected,public,internal)
面向对象编程主要思想是将数据以及处理这些数据的相应方法封装到类中,使用类创建的实例称为对象。类类型支持继承,派生的类可以对基类进行扩展和特殊化。
面向对象的引入是为了模拟客观世界和更好地对事物进行抽象化。
静态模拟 动态模拟
对象特性 属性 方法
对象关系 继承 信息
站在程序设计的角度上,对象的概念究竟有什么好处呢?它的好处就在于达到更完整的信息隐藏。信息隐藏的概念主要有两个目的:
1)将用户不需要知道的,或者不应该知道的数据处理隐藏起来,只留下操作接口。
2)保护数据,不被任意的使用与更改,要修改数据都要通过一定的操作接口。
在程序设计中,运用函数、子程序 的模块化概念只能达到信息隐藏的第一项要求,而对象的概念则可以完整地达到信息隐藏的理想。面向对象技术利用属性、方法模拟现实世界中的个体,并在程序中将属性和方法封装成对象。通过这样的机制,对象属性只能通过对象本身的方法访问存取,不能被对象以外的程序任意存取,这样不仅利用方法将数据处理过程隐藏起来,更进一步地保护了数据不被任意的修改。所以对象的概念达到了更完整的信息隐藏。
类和对象是面向对象的程序设计语言的核心和本质。类实际上定义了一种崭新的数据类型。与在C++中可以定义成员变量和函数的结构体有点类似。定义了类之后,就可以使用这种新的数据类型创建对象。类是对象的模板,对象是类的实例。使用类的好处在于,它有利于程序的模块化设计和开发,可以隐藏内部的实现细节,并能增强程序代码的重用性。
把众多的事物归纳、划分成一些类是人类在认识客观世界时经常采用的思维方法。分类的原则是抽象。类是具有相同属性和服务的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。
以下代码定义了Person人类:
public class Person
{
private string name;
private char sex;
private int age;
public Person(string n,char s,int a)
{
name=n;
sex=s;
age=a;
}
public void Display()
{
Console.WriteLine(“name:{0}”,name);
Console.WriteLine(“sex:{0}”,sex);
Console.WriteLine(“age:{0}”,age);
}
}
对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。它是类的实例。
创建类实例的格式如下:
类名 对象名=new 构造函数(参数类表);
例如:
Person Me= new Person (“fanxuemin”,m,22);
Person Me (“fanxuemin”,m,22);为C++中声明对象的方法,注意区别!
创建新对象时将调用类的构造函数。构造函数主要用来为对象分配存储空间,完成初试化操作(如给类的成员赋值等)。在C#中,类的构造函数遵循以下规定:
(1)构造函数的函数名与类的名称一样。
(2)一个类可以有多个构造函数。
(3)如果类没有构造函数,将自动生成一个默认的无参数构造函数,并使用默认值初始化对象的字段(例如,int将初始化为 0)。
(4)类的构造函数可通过初始值设定项来调用基类的构造函数,例如下面的:
public Employee(string n, char s, int a, string d, decimal sa)
: base(n, s, a) {}
(5)类的构造函数也可通过关键词this调用同一个类的另一个构造函数,例如:
public Person():this (“fanxuemin”,m,22);{}
一个类可包含下列成员的声明:
构造函数 析构函数 常数 字段 方法 属性 索引器 运算符 事件 委托 类 接口 结构
在定义类时不能对成员变量进行初始化,因为此时无法确定成员变量属于哪一个对象。成员变量一般都定义为private类型,也不能在声明对象后利用赋值运算对成员变量进行初始化。构造函数主要用来完成对成员变量的初始化工作,使得在声明对象时能自动地初始化对象,因为当程序创建一个对象时,系统将会自动调用该对象所属类的构造函数。
Person类中定义的构造函数为public Person(string n,char s,int a){}
析构函数的作用和构造函数刚好相反,用来在系统释放对象前做一些清理工作,如利用delete运算符释放临时分配的内存、清零某些内存单元等。当一个对象生存期结束时,系统会自动调用该对象所属类的析构函数。
注:构造函数的名称和类名相同,而析构函数的名称必须在类前加上“~”符号,注意构造函数和析构函数不能指定任何返回值类型,包括void返回类型。
常数
一般为类操作中要用到的定值数据,用const声明。
域又称字段,它是类的一个成员,这个成员代表与对象或类相关的变量。一个域相当于C++类中的简单成员变量。域的声明格式为:[域修饰符] 域类型 域名;
与变量定义一样,域也可以在定义的时候赋初值,如:
string model= "Nisan";
域修饰符可以是new、public、protected、internal、private、static、readonly等。
成员变数默认为private
Person类中定义了以下三个私有成员:
private string name;
private char sex;
private int age;
(To be continued)
评论