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

[ASP.net教程]《大话设计模式》学习心得系列(二)

面向对象基础(2)

本博文意在巩固基础知识,高手请绕过。

面向对象的三大特征:封装、继承、多态

什么是封装?

   每个对象都包含它能进行操作所需要的所有信息,这个特性称为封装,因此对象不必依赖其他对象来完成自己的操作。这样方法和属性包含在类中,通过类的实例来实现。

   类将数据和操作数据的方法结合成一个单位。在设计类时,不希望直接存取类中的数据,而是希望通过方法来存取数据。如此就可以达到封装数据的目的,方便以后维护、升级,也可以在操作数据时多一层判断,提高安全性。

    使用封装可以将数据隐藏起来,形成一个封闭空间。在编写程序时,对类的成员使用不同的访问修饰符,从而定义它们的访问级别。

  封装的优点:

    1.减少耦合;

    2.类内部的实现可以自由的修改;

    3.类具有清晰的对外接口。

什么是继承?

  对象的继承代表了一种“is-a”的关系,如果两个对象A和B,可以描述为“B是A”,则表明B可以继承A。     

  C#中提供了类的继承机制,只支持单继承,不能同时继承多个类。被继承的类叫基类也称父类,继承其成员的类叫派生类也称子类。       

  一个类从另一个类派生出来时,派生类继承了基类的特性。除了构造函数和析构函数外,派生类隐式地继承了直接基类的所有成员。子类可以从基类中继承的成员有方法、域、属性、事件、索引指示器。构造函数虽然不能被继承的,但是子类依然可以使用base关键字进行调用。    

  子类除了从基类继承的属性和功能外,还可以有属于自己的特性。子类还可以通过方法重写的方式来实现父类的功能。

 1 class Apple  //基类Apple 2 { 3  public void Applenum() 4  { 5   Console.WriteLine("苹果!"); 6  } 7 } 8 class BigApple:Apple  //BigApple类继承于Apple 9 {10  public new void Applenum() //使用new重写方法11  {12   Console.WriteLine("大苹果!");13  }14 }15 static void Main(string[] args)16  {  17   Apple apple=new Apple(); //创建Apple实例18    apple.Applenum();19   BigApple bigApple=new BigApple();  //创建BigApple实例20    bigApple.Applenum(); 21    Console.ReadKey();22  }

View Code

什么是多态?
  多态就是不同的类的实例,执行同一操作,最后产生不同的执行结果。就像两个苹果,虽然都属于苹果类,但有大小和形状不同,大小和形状都属于苹果的属性,这样就产生了多态性。
  多态性分为编译时多态和运行时多态。
  编译时的多态性是通过重载来实现的。方法重载是指一个方法名称具有多个数量或类型的参数的函数,传递的参数也不同,实现不同的功能。
  运行时的多态性是指程序运行过程中,根据实际情况来实现不同操作。在C#中,运行时的多态性通过虚成员实现。
  积累中需要重写的函数使用关键字virtual定义,该关键字放在返回类型前面。而派生类如果要重写虚函数,则要使用关键字override,该关键字放在返回类型前面。

  例如:
    通过重载实现编译时多态

 1 class Apple 2 { 3  private int applenum; 4  private string sapple; 5  public void Applenum() 6  { 7  Console.WriteLine("一共有几个苹果呀?"); 8  } 9  public void Applenum(int applenum)10  {11   Console.WriteLine("一共有{0}个苹果!",applenum);12  }13  public void Applenum(int applenum,string sapple)14  {15   Console.WriteLine("一共有{0}个苹果!{1}",applenum,sapple);16  }17 }18 19 static void Main(string[] args)20  {21   int applenum = 5;22   string sapple = "你是我的小苹果!";23   Apple apple=new Apple();24    apple.Applenum(applenum, sapple);25    apple.Applenum(applenum);26    apple.Applenum();27    Console.ReadKey();28  }

View Code

  例如:
    通过重写实现编译时多态

 1 class Apple   2 { 3  public virtual void Applenum()  //创建虚方法 4  { 5   Console.WriteLine("苹果!"); 6  } 7 } 8 class BigApple:Apple  //BigApple类继承于Apple 9 {10  public override void Applenum() //使用override重写方法11  {12   Console.WriteLine("大苹果!");13  }14 }15 static void Main(string[] args)16  {  17   Apple apple=new Apple(); //创建Apple实例18    apple.Applenum();19   BigApple bigApple=new BigApple();  //创建BigApple实例20    bigApple.Applenum(); 21    Console.ReadKey();22  }

View Code