<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      前言

        前面有文章寫到了面向?qū)ο缶幊毯兔嫦驅(qū)ο笤O(shè)計(jì)的頭五大原則(SOLID五大原則)。今天我們?cè)賮碚務(wù)劽嫦驅(qū)ο蟮娜筇匦?-封裝、繼承、多態(tài)

      封裝

      ?  被定義為"把一個(gè)或多個(gè)項(xiàng)目封閉在一個(gè)物理的或者邏輯的包中"。在面向?qū)ο蟪绦蛟O(shè)計(jì)方法論中,封裝是為了防止對(duì)實(shí)現(xiàn)細(xì)節(jié)的訪問。
      封裝只公開某些對(duì)外接口,隱藏具體實(shí)現(xiàn)細(xì)節(jié)。增加了一定的安全性,防止信息的泄露以及破壞。

        講到封裝,我們又得提下訪問修飾符了。

      *
      * public:所有對(duì)象都可以訪問;
      * private:對(duì)象本身在對(duì)象內(nèi)部可以訪問;
      * protected:只有該類對(duì)象及其子類對(duì)象可以訪問
      * internal:同一個(gè)程序集的對(duì)象可以訪問;
      * protected internal:訪問限于當(dāng)前程序集或派生自包含類的類型。
      繼承

        繼承是軟件復(fù)用的一種形式。使用繼承可以復(fù)用現(xiàn)有類的數(shù)據(jù)和行為,為其賦予新功能而創(chuàng)建出新類。?


        在現(xiàn)有類(基類、父類)上建立新類(派生類、子類)的處理過程稱為繼承。派生類能自動(dòng)獲得基類的除了構(gòu)造函數(shù)和析構(gòu)函數(shù)以外的所有成員,可以在派生類中添加新的屬性和方法擴(kuò)展其功能
      。

        這里繼承又可分為以下系列:

      *
      * 單重繼承:表示一個(gè)類可以派生自一個(gè)基類,C#采用此繼承
      * 多重繼承:多重繼承允許一個(gè)類派生自多個(gè)類,C#不支持多重繼承,但允許接口的多重繼承
      * 多層繼承:多層繼承允許有更大的層此結(jié)構(gòu),類B派生自類A,類C派生自類B,其中,類B也稱為中間基類,C#支持它,也很常用。
      * 接口繼承:允許接口多重繼承
      多態(tài)


        多態(tài)指在程序設(shè)計(jì)中存在同名不同方法的存在,主要通過子類對(duì)父類的覆蓋來實(shí)現(xiàn)多態(tài),設(shè)計(jì)原則之一就是要依賴于抽象,而不依賴于具體,增加靈活性。多態(tài)就是為了體現(xiàn)這一原則。

      實(shí)例講解

        這里我們假設(shè)一個(gè)場(chǎng)景,對(duì)圖形的面積進(jìn)行計(jì)算。在這里我們就抽象一個(gè)基類,形狀。然后其他的設(shè)計(jì)都來繼承它。

          類設(shè)計(jì)

          
      /// <summary> /// 抽象類 /// </summary> public abstract class Shape { private
      string ShapeName { get; set; } public Shape(string shapeName) { this.ShapeName =
      shapeName; }/// <summary> /// 計(jì)算面積 /// </summary> /// <returns></returns>
      public abstract double CalculateArea(); } /// <summary> /// 長(zhǎng)方形 /// </summary>
      public class Rectangle:Shape { /// <summary> /// 長(zhǎng) /// </summary> public double
      Longm {get; set; } /// <summary> /// 寬 /// </summary> public double Widem { get;
      set; } public Rectangle():base("Rectangle") { Longm = 0; Widem=0; } public
      override double CalculateArea() { return Longm * Widem; } } /// <summary> /// 圓形
      /// </summary> public class Circle: Shape { /// <summary> /// 半徑 /// </summary>
      public double R { get; set; } public Circle(): base("Circle ") { R = 0; } public
      override double CalculateArea() { return Math.PI*R*R; } }
         調(diào)用

      ?  
      class Program { static void Main(string[] args) { Console.WriteLine("
      請(qǐng)選擇計(jì)算面積的圖形:長(zhǎng)方形(A)/圓形(B)"); string answer = Console.ReadLine(); if (answer=="A")
      {double longm=0; double widem = 0; try { Console.WriteLine("請(qǐng)輸入長(zhǎng):"); longm =
      double.Parse(Console.ReadLine()); Console.WriteLine("請(qǐng)輸入寬:"); widem = double
      .Parse(Console.ReadLine()); }catch (Exception) { Console.WriteLine("請(qǐng)輸入數(shù)字!"); }
      Rectangle rectangle= new Rectangle(); rectangle.Longm = longm; rectangle.Widem =
      widem; Console.WriteLine($"此長(zhǎng)方形的面積是{rectangle.CalculateArea()}"); } else {
      double r=0; try { Console.WriteLine("請(qǐng)輸入半徑:"); r = int
      .Parse(Console.ReadLine()); }catch (Exception) { Console.WriteLine("請(qǐng)輸入數(shù)字!"); }
      Circle circle= new Circle(); circle.R = r; Console.WriteLine($"
      此圓形的面積是{circle.CalculateArea()}"); } } }
      總結(jié)

         本個(gè)案例實(shí)際作用不是很大,主要是方便講解理解封裝繼承多態(tài),在實(shí)例中,對(duì)圖形的名稱封裝,抽象一個(gè)抽象類圖形基類,圓形和長(zhǎng)方形繼承此基類。override
      重寫實(shí)現(xiàn)面積計(jì)算的多態(tài)。更多的還是需要在實(shí)際項(xiàng)目中實(shí)際運(yùn)用的。

      ?

        

                            c#基礎(chǔ)知識(shí)詳解系列
      <https://www.cnblogs.com/hulizhong/p/11205119.html>

      ?

        歡迎大家掃描下方二維碼,和我一起學(xué)習(xí)更多的C#知識(shí)

      ?

        

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點(diǎn)信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          少妇一级淫免费观看 | 国产精品系列在线观看 | 一级a做一级a做片性视频爱小说 | 婷婷伊人綜合中文字幕 | 人人操日日 | 特级婬片内谢A片AAA毛片软件 | 五月丁香婷婷综合 | 巨胸喷奶水视频www在线观看 | 日本成人一级特黄视频 | 日本护士献身取精xxxxx |