论文部分内容阅读
摘 要:继承性和多态性是面向对象的重要机制,其提高了软件模块的可复用性和可扩充性。本文重点介绍C#开发语言所涉及的面向对象核心技术,包括封装性、继承性与多态性等内容,旨在让致力于程序开发技术的爱好者深入学习C#语言的面向对象编程技术。
关键词:C#面向对象编程 封装性 继承性 多态性
C#是完全面向对象的,它应用了面向对象的程序设计思想,在分析目标问题时,首先将对象的共性抽象出来,对其进行分类,并且分析出各类之间的关系,使用类来描述同一类的问题,然后对类进行封装和继承,通过类的封装、继承和多态这三种重要特性构成了面向对象程序设计的基础,可以最大程度地实现代码重用,有效地降低了软件的复杂性。下面着重探讨C#面向对象编程的重要特性,即封装性、继承性与多态性。
1 C#封装机制
在C#中,几乎所有的内容都被封装在类中,类是C#的基础,每个类通过字段、属性、方法及其他一些成员来表达事物的状态和行为。编写C#程序的主要任务就是定义各种类及类中的各种成员。
利用“封装字段”重构操作,可以从现有字段快速创建属性,然后使用对新属性的引用无缝更新代码。当字段为 public 时,其他对象可以直接访问该字段并对其进行修改,而不会被拥有该字段的对象检测到。如果将该字段“封装”为属性,生成 get(读)和 set(写)访问器,则可以禁止其他对象的直接访问。
2 C#继承机制
在这个世界上,一般人都有名字、身份证、父母等特征要素,但是,一个成功人士除了有这些以外,还有成功的业绩。所以成功人士也可以看作是一般人,这与C#语言中继承的原理非常相似:一个基类具备基本特征,派生类除了具备基本特征外还具备特殊的特征。
继承性是指在类之间建立一种关系,即在基类的基础上建立新的类称为派生类,使得新定义的派生类可以继承基类的成员,还可以定义新的成员,建立起类的新层次。
继承表示了实体间的一种层次关系:基类(父类),派生类(子类);派生类可以继承基类的特征和能力,如属性和方法;派生类还可以添加新的特性或者是修改已有的特性以满足特定的要求,但不能删除基类的成员;一个父类可以有多个子类,父类是所有子类公共特征的集合,子类则是父类的特殊化;C#中每个子类只能有一个基类,即不允许多重继承。
继承的好处是实现了代码重用,维护方便。派生类可以继承基类中除构造函数和析构函数外的所有可访问的成员。访问修饰符protected的作用,子类可以访问,其他的类都不可以访问。继承是可传送的。基类与派生类之间的转换分为隐式转换(派生类→基类)和显式转换(基类→派生类)。
派生类是从基类中继承成员,并且添加新成员或重新定义成员,一般称被继承的类为基类或父类,继承后产生的新类称为派生类或子类。基类中的构造函数和析构函数不能被派生类继承,其他成员都能被继承。
3 C#多态机制
课堂上,老师给出很多个函数,他们的作用都是比较大小。这些函数我名称都相同,不同的是参数的类型,个数和函数的返回值。过后,老师又给出一大堆数据,它们有整型、单精度、双精度等。而同学们要根据这些数据找出相应的函数,最终根据那个函数判断大小。这就是多态的原理。多态性是指在类中定义了功能不同但名称相同的方法或属性,通过在类中声明虚拟方法和属性,在派生类中重写这些方法成员的实现,使得调用名称相同的方法成员所执行的操作可能不同,展示出类的多态性。
3.1虚拟方法和重写方法
(1)虚拟方法。派生类继承了基类方法,如果在派生类中需要用到与基类相同的方法名,但方法执行的操作内容不同时,则需要“重写”它们,即重写方法成员的实现。在基类中声明方法时用virtual关键字来修饰,表示此方法为虚拟方法,用virtual声明的方法可以在派生类中重写。虚拟方法声明中不能包含static、abstract、override修饰符。在声明方法时没有用virtual关键字的,该方法为非虚拟方法。非虚拟方法的执行是不变的,不管方法在它声明的类的实例还是在派生类的实例中被调用,执行都是相同的。
(2)重写方法。重写方法就是在派生类中用相同的名称重写基类继承的虚拟方法,也就是在派生类中重新定义此虚拟方法的实现,在声明方法时用override关键字来修饰,表示该方法为重写方法。虚拟方法的执行可以被派生类重写后改变,具体实现时要求重写方法的方法名、返回值类型、参数表中的参数个数、类型、顺序都必须与基类中的虚拟方法完全一致。在方法声明中不能有new、static、virtual修饰符。
3.2抽象类和抽象成员
(1)抽象类。带有纯虚函数的类称为抽象类。抽象类是一种特殊的类,它是为了抽象和设计的目的而建立的,它处于继承层次结构的较上层。抽象类是不能定义对象的,在实际中为了强调一个类是抽象类,可将该类的构造函数说明为保护的访问控制权限。
抽象类的主要作用是将有关的组织在一个继承层次结构中,由它来为它们提供一个公共的根,相关的子类是从这个根派生出来的。
抽象类刻画了一组子类的操作接口的通用语义,这些语义也传给子类。一般而言,抽象类只描述这组子类共同的操作接口,而完整的实现留给子类。
抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出。如果派生类没有重新定义纯虚函数,而派生类只是继承基类的纯虚函数,则这个派生类仍然还是一个抽象类。如果派生类中给出了基类纯虚函数的实现,则该派生类就不再是抽象类了,它是一个可以建立对象的具体类了。
(2)抽象成员。抽象类中包含的抽象成员可以是抽象属性和抽象方法,声明时都用abstract關键字进行修饰,表示该属性和方法未实现,其中抽象方法没有方法体,但必须声明,在它的派生类中通过重写提供实现。
综上所述,封装性、继承性和多态性是面向对象程序设计的重要特征,这三大特征是相互关联的。封装性是基础,继承性是关键,多态性是补充,而多态又必须存在于继承的环境之中。
关键词:C#面向对象编程 封装性 继承性 多态性
C#是完全面向对象的,它应用了面向对象的程序设计思想,在分析目标问题时,首先将对象的共性抽象出来,对其进行分类,并且分析出各类之间的关系,使用类来描述同一类的问题,然后对类进行封装和继承,通过类的封装、继承和多态这三种重要特性构成了面向对象程序设计的基础,可以最大程度地实现代码重用,有效地降低了软件的复杂性。下面着重探讨C#面向对象编程的重要特性,即封装性、继承性与多态性。
1 C#封装机制
在C#中,几乎所有的内容都被封装在类中,类是C#的基础,每个类通过字段、属性、方法及其他一些成员来表达事物的状态和行为。编写C#程序的主要任务就是定义各种类及类中的各种成员。
利用“封装字段”重构操作,可以从现有字段快速创建属性,然后使用对新属性的引用无缝更新代码。当字段为 public 时,其他对象可以直接访问该字段并对其进行修改,而不会被拥有该字段的对象检测到。如果将该字段“封装”为属性,生成 get(读)和 set(写)访问器,则可以禁止其他对象的直接访问。
2 C#继承机制
在这个世界上,一般人都有名字、身份证、父母等特征要素,但是,一个成功人士除了有这些以外,还有成功的业绩。所以成功人士也可以看作是一般人,这与C#语言中继承的原理非常相似:一个基类具备基本特征,派生类除了具备基本特征外还具备特殊的特征。
继承性是指在类之间建立一种关系,即在基类的基础上建立新的类称为派生类,使得新定义的派生类可以继承基类的成员,还可以定义新的成员,建立起类的新层次。
继承表示了实体间的一种层次关系:基类(父类),派生类(子类);派生类可以继承基类的特征和能力,如属性和方法;派生类还可以添加新的特性或者是修改已有的特性以满足特定的要求,但不能删除基类的成员;一个父类可以有多个子类,父类是所有子类公共特征的集合,子类则是父类的特殊化;C#中每个子类只能有一个基类,即不允许多重继承。
继承的好处是实现了代码重用,维护方便。派生类可以继承基类中除构造函数和析构函数外的所有可访问的成员。访问修饰符protected的作用,子类可以访问,其他的类都不可以访问。继承是可传送的。基类与派生类之间的转换分为隐式转换(派生类→基类)和显式转换(基类→派生类)。
派生类是从基类中继承成员,并且添加新成员或重新定义成员,一般称被继承的类为基类或父类,继承后产生的新类称为派生类或子类。基类中的构造函数和析构函数不能被派生类继承,其他成员都能被继承。
3 C#多态机制
课堂上,老师给出很多个函数,他们的作用都是比较大小。这些函数我名称都相同,不同的是参数的类型,个数和函数的返回值。过后,老师又给出一大堆数据,它们有整型、单精度、双精度等。而同学们要根据这些数据找出相应的函数,最终根据那个函数判断大小。这就是多态的原理。多态性是指在类中定义了功能不同但名称相同的方法或属性,通过在类中声明虚拟方法和属性,在派生类中重写这些方法成员的实现,使得调用名称相同的方法成员所执行的操作可能不同,展示出类的多态性。
3.1虚拟方法和重写方法
(1)虚拟方法。派生类继承了基类方法,如果在派生类中需要用到与基类相同的方法名,但方法执行的操作内容不同时,则需要“重写”它们,即重写方法成员的实现。在基类中声明方法时用virtual关键字来修饰,表示此方法为虚拟方法,用virtual声明的方法可以在派生类中重写。虚拟方法声明中不能包含static、abstract、override修饰符。在声明方法时没有用virtual关键字的,该方法为非虚拟方法。非虚拟方法的执行是不变的,不管方法在它声明的类的实例还是在派生类的实例中被调用,执行都是相同的。
(2)重写方法。重写方法就是在派生类中用相同的名称重写基类继承的虚拟方法,也就是在派生类中重新定义此虚拟方法的实现,在声明方法时用override关键字来修饰,表示该方法为重写方法。虚拟方法的执行可以被派生类重写后改变,具体实现时要求重写方法的方法名、返回值类型、参数表中的参数个数、类型、顺序都必须与基类中的虚拟方法完全一致。在方法声明中不能有new、static、virtual修饰符。
3.2抽象类和抽象成员
(1)抽象类。带有纯虚函数的类称为抽象类。抽象类是一种特殊的类,它是为了抽象和设计的目的而建立的,它处于继承层次结构的较上层。抽象类是不能定义对象的,在实际中为了强调一个类是抽象类,可将该类的构造函数说明为保护的访问控制权限。
抽象类的主要作用是将有关的组织在一个继承层次结构中,由它来为它们提供一个公共的根,相关的子类是从这个根派生出来的。
抽象类刻画了一组子类的操作接口的通用语义,这些语义也传给子类。一般而言,抽象类只描述这组子类共同的操作接口,而完整的实现留给子类。
抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出。如果派生类没有重新定义纯虚函数,而派生类只是继承基类的纯虚函数,则这个派生类仍然还是一个抽象类。如果派生类中给出了基类纯虚函数的实现,则该派生类就不再是抽象类了,它是一个可以建立对象的具体类了。
(2)抽象成员。抽象类中包含的抽象成员可以是抽象属性和抽象方法,声明时都用abstract關键字进行修饰,表示该属性和方法未实现,其中抽象方法没有方法体,但必须声明,在它的派生类中通过重写提供实现。
综上所述,封装性、继承性和多态性是面向对象程序设计的重要特征,这三大特征是相互关联的。封装性是基础,继承性是关键,多态性是补充,而多态又必须存在于继承的环境之中。