你的位置:首页 > ASP.net教程

[ASP.net教程]C#面向编程的三大特征


   在面向对象的编程中,首先要清楚地理解面向对象编程的三个基本特征: 封装, 继承, 多态!

 

 

1、封装

更确切地说,是对象封装。就是每个对象都包含自己进行某种操作时所需要的所有信息,而不依赖于其他对象来完成该操作。

对象间的相互联系和相互作用过程主要通过消息机制得以实现。对象之间并不需要过多的了解对方内部的具体状态或运动规律。面向对象的类是封装良好的模块,类定义将其说明(用户可见的外部接口)与实现(用户不可见的内部实现)显示地分开,其内部实现按其具体定义的作用域提供保护。类是封装的最基本单位。

属性property:属性是类、结构和接口的命名成员。它们提供了通过访问器accessor读、写或计算私有字段值的灵活机制。
属性是这样的成员:它们提供灵活的机制来读取编写或计算私有字段的值,可以像公共数据成员一样使用属性,但实际上他们是被称为访问器的特殊方法。这使得数据在可被轻松访问的同时,仍能提供方法的安全性和灵活性。
属性机制使得私有成员被隐藏,实现了封装的效果,良好的封装可以减少耦合,淡化类与类之间的紧密度依赖关系。

<例>

public class Dog

{   

    private string name;

    public string Name

    {

        get{return name;}

       set{name=value;}

    }

    public void bark()

    {

    }

}

2、继承

继承是一个现有的类创建新类的过程,现有的类称为父类,新类称为子类,子类可以访问父类的属性和方法。

继承符号: “:”实现继承操作,建立Is-a关系。
virtual:用于修饰方法、属性、索引器、或事件声明,并且允许在派生类中重写这些对象。
override:重写虚方法,将从父类继承的虚方法重写覆盖。
new关键字:在子类中声明一个名称和继承的方法名相同新的方法,如果声明子类的对象是父类的类型,将还会执行继承的父类的方法,override则会执行重写过的方法。
base:可以调用父类的成员方法,除了构造函数和析构函数,派生类将隐式的继承了直接基类的所有成员。也可以显示的调用父类的构造函数来构造子类的成员数据。

 

3、多态

多态性是指同名的方法可以在不同的类中具有不同的运行规律。

同一操作作用于不同的对象,可以有不同的解释,产生不同的执行效果。多态性通过派生类覆写基类中的虚函数型方法来实现。多态性分为两种,一种是编译时的多态性,一种是运行时的多态性。(1)编译时的多态性:编译时的多态性是通过重载来实现的,对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。(2)运行时的多态性:运行时的多态性就是指直到系统运行时,才根据实际情况实现何种操作。C#中运行时的多态性是通过覆写成员实现。
1.声明:abstract class classname在类声明中使用abstract修饰符指示某个类只能是其他类的基类,标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。
2.使用abstract关键字的注意事项:
(1)抽象类的特性:
成员:抽象类可以包含抽象方法、属性、索引器、事件,也可以包含非抽象的方法。
规则:抽象类不能实例化,不能用sealed修饰符修改抽象类,否则就意味这抽象类不能被继承。从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实现。
(2)抽象方法的特性:
抽象方法是隐式的虚方法,只允许在抽象类中使用抽象方法声明。因为抽象方法声明不提供实际的实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号”{}”。
实现多态性的重载和覆写的比较:

简述抽象方法和虚方法的区别?

    01.定义一个抽象类,用abstract 修饰

    02.抽象方法不能有方法体,甚至连{}都不能有

    03.抽象方法只能存在于抽象类中,但是抽象类中可以有非抽象方法

    04.抽象类不能实例化

    05.抽象类中抽象方法只是用来规定方法的形式(参数,返回值),约束子类方法的形式

    06.抽象类中的抽象成员必须在子类中全部实现,除非子类也是抽象类

    07.子类实现抽象方法的快捷键,Ctrl+.(没有输入法情况下 )

    shift+alt+F10

  08.抽象类不能用static修饰:如果是static,抽象就无法被继承,也就失去了抽象类本身的意义


重载的特点(两必须一可以):方法名必须相同,参数列表必须不相同,返回类型可以不相同。
覆写的特点(三相同):相同的方法名称,相同的参数列表,相同的返回值类型。
3.密封类:密封类不能被继承,密封方法重写基类的方法,但其本身不能在任何派生类中进一步重写。密封类只要是为类防止第三方未经授权的扩展自身的类。