程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#總結(三)—三大特性(封裝、繼承、多態)

C#總結(三)—三大特性(封裝、繼承、多態)

編輯:C#入門知識

一、封裝 1、定義          每個對象都包含它進行操作所需要的所有信息,這個特性稱為封裝。因此對象不必以來其他對象來完成自己的操作。這樣方法和類包裝在類中,通過類的實例來實現。 2、好處 良好的封裝能夠減少耦合; 類內部實現就可以自由地修改; 類具有清晰的接口; 3、實例 [csharp]   <span style="font-size:18px;">class  Cat      {              private string name="";              public Cat(string name)              {                   this name=name;              }                     public string Shout()             {                     return "我的名字叫"+name+"小貓";            }      }</span>       二、繼承 1、定義         繼承就是從父類中獲取一些公開的成員,如方法和屬性。C#中只允許繼承一個父類,但允許繼承多個接口。如果子類繼承接口,則必須實現接口中定義的所有公開成員。          公開成員是指在父類中定義為public的成員(public的作用域可在子類中生效,而private作用域則不可) 子類繼承父類: 子類擁有父類非Private的屬性和功能; 子類具有自己的屬性和功能,即子類可以擴展父類沒有的屬性和功能; 子類還可以以自己的方式實現父類的功能(方法重寫) 2、優點         繼承使得所有子類公共部分都放在父類中,使得代碼得到共享,這就避免了重復。此外,繼承可使得修改或擴展繼承而來的實現都較為容易。 3、實例 [csharp]   <span style="font-size:18px;">例1:      //父類 ParentClass      classParentClass       {             privatestring_name;                //屬性             public stringParentName        //父類名             {                    get{return _name;}                    set{_name=value;}              }      }</span>      <span style="font-size:18px;">//子類      //父類SonClass      class SonClass:ParentClass       {             privatestring_name;                //屬性             public stringSonName        //子類名             {                    get{return _name;}                    set{_name=value;}              }      }      //客戶端      SonClass myson=new SonClass(); //創建子類對象      myson.ParentName="父名";          //自動繼承父類的屬性      myson.SonName="子名";          //子類自己的屬性      例2:        private void button1_Click(object sender,EventArgs e)              {                  Cat cat = new Cat("咪咪");//將類實例化 Cat  cat聲明一個Cat對象,對象名為cat;newCat()將此cat對象實例化                  cat.ShoutNum = 5;            //給屬性賦值                  MessageBox.Show(cat.Shout());              }              class Animal                               //定義父類              {                  protected string name ="";          //注意變為Protected  子類可以繼承                  public Animal(string name)                  {                      this.name = name;                         }                  public Animal()                  {                      this.name = "無名";                  }                  protected int shoutNum = 3;               //變為protected                  public int ShoutNum                  {                      get                      {                          return shoutNum;                      }                      set                      {                          shoutNum = value;                      }                  }              }              class Cat : Animal                       //注意變化              {                  public Cat() : base()                //子類構造方法需要調用父類同樣參數類型的構造方法,用base關鍵字代表父類                  { }                  public Cat(string name):base(name)           //注意變化                  { }                  public string Shout()                  {                      string result = "";                      for (int i = 0; i <shoutNum; i++)                          result += "喵!";                      return "我的名字叫:" +name + "" + result;                  }              }              class Dog : Animal                               //注意變化              {                  public Dog() : base()                  { }                  public Dog(string name): base(name)                  { }                  public string shout()                  {                      string result = "";                      for (int i = 0; i <shoutNum; i++)                          result += "汪!";                      return "我的名字叫:" +name + "" + result;                  }              }              private void button2_Click(objectsender, EventArgs e)              {                  Dog dog = new Dog("狗");//將類實例化 Cat  cat聲明一個Cat對象,對象名為cat;newCat()將此cat對象實例化                  dog.ShoutNum = 5;            //給屬性賦值                  MessageBox.Show(dog.shout());              }   </span>       4、注意 Protected表示繼承時子類可以對基類有完全訪問權。也就是說protected修飾的類成員,對子類公開,段不對其他類公開。 三、多態 1、定義        多態是指類可以有多種形態,通過修改可以形成多個實現方法。子類從父類繼承時它會獲得父類的所有方法、字段、屬性、事件。多態表示不同的對象可以執行相同的操作,但要通過它們自己的實現代碼來執行。        若要改變父類的數據和行為,兩種方式:可創建新的成員替換父級成員,或者可以重寫虛擬的父級成員。  (1)若要替換父級成員,需要使用new關鍵字。下面是GetName方法的兩種形態,一種是返回父級名稱,一種是返回子級名稱。 [csharp]   <span style="font-size:18px;">第一種:返回父級名稱      class PerentClass    //父類      {             public string GetName()             {                return"父級名稱";              }      }      第二種:返回子級名稱      class SonClass:PerentClass     //子類繼承父類      {             public new string GetName()             {                return"子級名稱";              }      }      (2)重寫虛擬的父級成員的兩個條件:父級成員使用關鍵字“virtual”;子級成員使用“override”。代碼      class PerentClass    //父類      {             public virtual string  GetName()             {                return"父級名稱";              }      }             class SonClass:PerentClass     //子類繼承父類      {             public override string GetName()             {                return"子級名稱";              }      }</span>   2、注意 子類以父類省份出現 子類在工作中以自己的方式來實現 子類乙父類的身份出現時,子類特有的屬性和方法不可同時使用 使用多態時,需了解:虛方法和方法重寫 為了使子類的實例完全接替來自父類的成員,父類必須將該成員聲明為虛擬的。這是通過在該成員的返回類型之前添加virtual來實現。 子類選擇使用override關鍵字,將父類實現替換為自己的實現,這就是方法重寫。 3、實例 (1)創建類"Employee"表示公司裡的員工。它包含虛方法GetDepart。代碼: [csharp]   class Employee    //父類      {             public virtual string  GetDepart()             {                return"總公司";              }      }   (2)創建類"MarketEmployee",它重寫了父類中的GetDepart方法。代碼 [csharp]   class MarketEmployee:Employee    //子類繼承父類      {             public override string GetDepart()             {                return"市場部";              }      }   (3)客戶端調用兩種形態的方法。 [csharp]  www.2cto.com Employee myee=new Employee();                            //創建父類      string str1=myee.GetDepart();                                 //結果為父公司      MarketEmployee yee=newMarketEmployee();    //創建子類      string str2=yee.GetDepart();                                   //結果為子公司      

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved