资源描述
第五章 类与对象(之二)
授课教师:张俊峰
复习回顾:
类是对象的符号表示形式,是创建对象的模板;类可以定义对象的属性和可执行的操作(方法、事件),并定义保存对象状态(字段)的值。
在面向对象的概念里,现实世界的个体(对象)将抽象转化为程序中的对象,而个体(对象)的数据抽象转化为对象的数据成员,个体(对象)的特性抽象转化为对象的属性,个体(对象)的行为及处理问题的方法成为对象的方法。
类的实例是对象。对象可以执行类定义的操作,处理属于类的数据,可以通过调用对象的方法访问其属性、事件和字段,来访问对象的功能。
实例1:上节课作业---根据历法知识,所谓闰年是指输入的年份能被4整除,但不能被100整除;或者,能被400整除。试编程实现判断一个年份是不是闰年。
要点:定义一个日期类Tdate,这个类中拥有表达年、月、日的三个数据成员(即属性)month、day、year,另外,类中有一个判断是不是闰年的一个方法IsLeapYear。在定义完这个类之后,就可以由此类生成一个对象,使用该对象来表现自己就可以了。
5.2 实例构造函数
定义:实例构造函数是与类同名的特殊方法成员,它是实现初始化类实例所必需操作的成员,在C#中不允许使用为初始化的变量,因此在执行构造函数之前,对象是不可用的。
如果使用未初始化的变量,执行程序时会出现编译错误提示:使用了未赋值的局部变量。要初始化类变量,必须使用new运算符调用构造函数。如Person person1=new Person();
1、默认实例构造函数
在C#中,如果类不包含任何实例构造函数声明,则自动提供一个默认的无参数的实例构造函数,并使用默认值初始化对象字段:基本类型字段数据为0、bool字段为fale、引用类型为null。
注意:只有在类不包含任何构造函数声明的前提下,系统才自动提供一个默认的无参数构造函数。可以在类中定义一个无参数的构造函数,同时定义带参数的构造函数,这是实际上就成了构造函数的重载。
2、实例构造函数的重载
定义:实例构造函数是与类同名的特殊方法,当类定义中含有两个以上其参数个数或种类不同的实例构造函数时,称为实例函数的重载。当对不同数据类型进行操作时,重载非常有用,因为重载提供了对可用数据类型的选择,所以他使得实例构造函数的使用更加方便灵活。
3、析构函数
定义:除了初始化类实例的构造函数之外,C#还提供了另外一个特殊的函数成员,即析构函数,析构函数用于销毁类的实例,释放被这些类的实例所占用的资源。析构函数没有任何参数,也不返回任何值,其函数名与类名相同,且在其前面加上符号~。析构函数是自动调用的,程序员无法控制何时调用析构函数。当任何代码都不在可能使用一个实例时,该实例就符合被销毁的条件。可以在实例符合被销毁条件之后的任何时间执行析构函数。程序退出是也会自动调用析构函数。
注意:一个类只能有一个析构函数,无法重载。系统能够提供默认析构函数,我们一般在析构函数里做释放资源等善后工作。
4、名称空间namespace
因为有许多人参加编写C#程序,所以不同程序员定义的类可能重名,如果某程序同时使用两个类,就可能造成命名冲突,命名空间通过为唯一类名提供一种约定,来尽量避免这个问题。在指定的命名空间中,两个类不能同名。但是,在不同的命名空间中类的名称可以相同。
注意:类库中的类不包含Main方法,这表明类库中的类不能用于开始一个应用程序的执行,类库中的类设计成功其他程序使用;类库代表的是一个程序集,要在其他项目中使用类库中的类,必须在对应项目中添加代表类库的程序集的引用;我们只能重用类库中的公共类。非公共类只能由同一程序集中其他类使用。
5、类成员可以分为静态成员和对象成员
类是类型而不是对象,一般在类里定义的成员是每个由此类产生对象都拥有的,因此可以称之为对象成员,但有时需要让类的所有对象在类的范围内共享某个成员,而这个成员不属于任何由此类产生的对象,它是属于整个类的,这种成员称之为静态成员。
类的成员要么是静态成员,要么是实例成员。一般来说,将静态成员看作属于类、将实例成员看作属于对象。
注意:静态成员必须用static修饰符;访问方法---类名.成员名称(对象.成员名称);
6、对象参数与返回值为对象
类是引用对象,引用类型变量的值为该变量引用对象的地址,类类型的变量包含对数据的引用(该变量称之为对象变量)。对于类,两个变量可能引用同一个对象,因此对一个变量的操作可能影响另一个变量所引用的对象。
对象作参数:传值和传引用。
方法的返回值可以与该方法所在类相同,也可以为其他对象。
7、方法的重载:
每个方法都有签名,方法的签名由方法名称以及它的每个形参的类型和种类(值、引用、输出)组成。具体说来,方法签名不包含返回类型。
在类中,如果声明了多个同名方法,但它们的签名不同,则称为方法的重载。
当方法对不同数据类型进行操作时,重载非常有用。方法的重载提供了对可用数据类型的选择,所以它使得方法的使用更加容易。
展开阅读全文