[练手9]面向对象

C#是一种现代的面向对象的语言.面向对象的三个特征:

继承, 封装,多态

一 继承(inheritance):继承是一个面向对象的词语.说明,一个类(派生类)能分享,其它类(基类)的特征和行为.派生类和基类是"is a"的关系.

base classes(基类):通常基类可以自己实例化,或被继承.派生类继承基类中的成员,被标记为protected或更大的权限.语法: class (derive class name):(base class name)

abstract classes(抽象类):抽象类是一种特殊的基类.除过普通的类成员,它们还有抽象的类成员.抽象类成员,是不能被实例化的方法和属性.所有直接从抽象类派生的类,必须实现抽象的方法和属性.抽象类不能被实例化.

基类的构造函数,可以被派生类调用,用base().

 

Hiding Base Class Members(隐藏基类成员)

派生类可以和基类有同样名字的成员.这时,就会隐藏基类的成员.

派生类用new修饰符,说明,和基类有同样名字的成员.

sealed classed(密封类)

密封类是不能被继承的类.为了避免从一个类中继承,就要生成密封类.

例子:
using System;
public class WebSite
{
  public string SiteName;
  public string URL;
  public string Description;

  public WebSite()
  {
  }

  public WebSite( string strSiteName, string strURL, string strDescription )
  {
    SiteName  = strSiteName;
    URL     = strURL;
    Description = strDescription;
  }

  public override string ToString()
  {
    return SiteName + ", " +
        URL   + ", " +
        Description;
  }
}

abstract public class Contact
{
  public virtual string UpdateNotify()
  {
    return "Web Site Change Notification";
  }
}

public class Customer : Contact
{
  public new string UpdateNotify()
  {
    return @"
This is to let you know your
favorite site, Financial Times,
has been updated with new links";
  }
}

public class SiteOwner : Contact
{
  WebSite mySite;

  public SiteOwner(string aName, WebSite aSite)
  {
    mySite = new WebSite(aSite.SiteName,
               aSite.URL,
               aSite.Description);
  }

  public new string UpdateNotify()
  {
    return @"
This is to let you know your site, " + ""n" +
mySite.SiteName + @", has been added as
a link to Financial Times.";
  }
}

public class Test
{
  public static void Main()
  {
    WebSite leFin = new WebSite("Le Financier",
                  "http://www.LeFinancier.com";,
                  "Fancy Financial Site");

    Contact[] Contacts = new Contact[2];

    Contacts[0] = new SiteOwner("Pierre Doe", leFin);
    Contacts[1] = new Customer();

    foreach (Contact poc in Contacts)
    {
      if (poc is SiteOwner)
      {
        Console.WriteLine("Message: {0}"n",
         ((SiteOwner)poc).UpdateNotify());
      }
      else
      {
        Console.WriteLine("Message: {0}"n",
         ((Customer)poc).UpdateNotify());
      }
    }
  }
}

二 封装(Encapsulation):封装是一个面向对象的概念,对外部世界,隐藏类的内部.

封装优点:

1.好的封装能减少耦合.

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

3.一个类有更清楚的接口.

Data Hiding(数据隐藏):封装的一个最有用的形式是数据隐藏.一个类的数据表现一个对象的状态.

修饰符支持封装:

Private:只有类本身能存取.

Protected:类和派生类可以存取.

Internal:只有同一个项目中的类可以存取.

Protected Internal:是Protected和Internal的结合.

Public:完全存取.

other Encapsulating Strategy:(其他封装策略)属性和索引器的目的是封装一个类的细节和给类的用户提供一个公共的接口.

封装和继承的关系:

封装的意思是包容(聚合),类与类之间的关系是"has a".一个类里面有另一个类.

继承,类与类之间的关系是"is a".

三 多态(Polymorphism):就是怎样重载一个虚拟类.多态是面向对象的重要概念.
Implementing Polymorphism(实现多态):

原文地址:https://www.cnblogs.com/eugenewu0808/p/DO9.html