欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談C# 抽象類與開閉原則

 更新時(shí)間:2020年06月17日 11:26:51   作者:安靜點(diǎn)--  
這篇文章主要介紹了C# 抽象類與開閉原則的的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

1.抽象類與抽象方法:

(1)使用關(guān)鍵字abstract修飾的類,稱為抽象類.

(2)抽象類只是用到一個(gè)類所具有的行為,不能單獨(dú)通過創(chuàng)建對(duì)象來使用.使用new是錯(cuò)誤的.可以通過派生類來實(shí)現(xiàn)其函數(shù)成員的具體邏輯。

(3)抽象類中可以有抽象方法,也可以沒有任何抽象方法.只要類中存在一個(gè)抽象方法,這個(gè)類就是抽象類。

(4)抽象類不能是靜態(tài)的(static)或者密封的(sealed)

下面就是一個(gè)簡單的抽象類

abstract class Vehicle
 { 
  public abstract void test();
  public void VehicleTest()
  {

  }
 }

 class Car : Vehicle
 { 
  public override void test()
  {

  }

 }

2.開閉原則

 如果不是為了修改bug,或者是添加新的功能,不要隨便更改類的代碼。

換句話說,我們應(yīng)該封裝那些確定的,不變的,穩(wěn)定的,固定的。把不確定的,有可能會(huì)改變的成員聲明為抽象類,留給子類去實(shí)現(xiàn)。

3.我們簡單實(shí)現(xiàn)了一個(gè)繼承

class Program
 {
  static void Main(string[] args)
  {
   Vehicle raceCar = new RaceCar();
   
   Console.ReadKey();
  }
 }

 /// <summary>
 /// 交通工具類
 /// </summary>
 class Vehicle
 {
  /// <summary>
  /// 停車
  /// </summary>
  public void Stop()
  {
   Console.WriteLine("Stopped");
  }
  /// <summary>
  /// 加油
  /// </summary>
  public void Fill()
  {
   Console.WriteLine("Fill");
  } 
 }

 class Car : Vehicle
 {
  public void Run()
  {
   Console.WriteLine("Car is running"); 
  } 
 }
 class RaceCar : Car
 { 
  public void Run()
  {
   Console.WriteLine("RaceCar is running");

  } 
 }

從上面的代碼我們可以看出這是一個(gè)繼承鏈,其中Run方法是根據(jù)不同種類的車來區(qū)別的,所以我們?nèi)绻雽?shí)現(xiàn)多態(tài),比如    Vehicle raceCar = new RaceCar();此時(shí)raceCar 對(duì)象是調(diào)不到Run方法的,因?yàn)閂ehicle類中沒有這個(gè)方法,以前對(duì)于這種情況的解決方法是在Vehicle中加上Run方法,并且判斷有什么類型:

public void Run(string type)
  {
   if (type == "Car")
   {
    Console.WriteLine("Car is running");
   }
   else if (type == "RaceCar")
   {
    Console.WriteLine("RaceCar is running");
   }
   else
   {

   }
  }

如上代碼,這樣的話,當(dāng)增加新類型的時(shí)候還要再改這個(gè)基類中的方法,違反了開閉原則( 如果不是為了修改bug,或者是添加新的功能,不要隨便更改類的代碼),所以需要做一下修改:

public virtual void Run()
  {
  
    Console.WriteLine("RaceCar is running");
   
  }

派生類來重寫這個(gè)方法,這樣增加新類型的時(shí)候重寫就可以,就不用再更改基類的代碼了。但是,如果你覺得這個(gè)類中基本不會(huì)調(diào)用這個(gè)Run方法,那我們可以去掉方法體,改成抽象方法,相應(yīng)的類也變成抽象類,Run完全由派生類來重寫。

class Program
 {
  static void Main(string[] args)
  {
   Vehicle raceCar = new RaceCar();

   Console.ReadKey();
  }
 }

 /// <summary>
 /// 交通工具類
 /// </summary>
 abstract class Vehicle
 {
  /// <summary>
  /// 停車
  /// </summary>
  public void Stop()
  {
   Console.WriteLine("Stopped");
  }
  /// <summary>
  /// 加油
  /// </summary>
  public void Fill()
  {
   Console.WriteLine("Fill");
  }
  public abstractvoid Run()
  {
  
    Console.WriteLine("RaceCar is running");
   
  }
 }

 class Car : Vehicle
 {
  public override void Run()
  {
   Console.WriteLine("Car is running");
  }
 }
 class RaceCar : Car
 {
  public override void Run()
  {
   Console.WriteLine("RaceCar is running");

  }
 }

4.接口與抽象類

(1)具體類-》抽象類-》接口,越來越抽象,內(nèi)部實(shí)現(xiàn)的類越來越少。

(2)抽象類為復(fù)用而生:專門作為基類來使用,也具有解耦功能。

(3)封裝確定,開放不確定的,推遲到子類實(shí)現(xiàn)。

(4)接口為解耦而生,高內(nèi)聚,低耦合,方便單元測(cè)試。

(5)都不能實(shí)例化,只能聲明變量,引用具體類的實(shí)例。

到此這篇關(guān)于淺談C# 抽象類與開閉原則的文章就介紹到這了,更多相關(guān)C# 抽象類與開閉原則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c#實(shí)現(xiàn)將pdf轉(zhuǎn)文本的示例分享

    c#實(shí)現(xiàn)將pdf轉(zhuǎn)文本的示例分享

    這篇文章主要介紹了c#實(shí)現(xiàn)將pdf轉(zhuǎn)文本的示例,需要的朋友可以參考下
    2014-03-03
  • C#虛函數(shù)用法實(shí)例分析

    C#虛函數(shù)用法實(shí)例分析

    這篇文章主要介紹了C#虛函數(shù)用法,實(shí)例分析了C#中虛函數(shù)的功能與基本使用技巧,需要的朋友可以參考下
    2015-07-07
  • WinForm使用DecExpress控件中的ChartControl插件繪制圖表

    WinForm使用DecExpress控件中的ChartControl插件繪制圖表

    這篇文章介紹了WinForm使用DecExpress控件中的ChartControl插件繪制圖表的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C# 設(shè)計(jì)模式系列教程-策略模式

    C# 設(shè)計(jì)模式系列教程-策略模式

    策略模式是一種定義一系列算法的方法,從概念上來看,所有算法完成的都是相同的工作,只是實(shí)現(xiàn)不同,它可以以相同的方式調(diào)用所有的算法,減少了各種算法類與使用算法類之間的耦合。
    2016-06-06
  • C#圖像處理之木刻效果實(shí)現(xiàn)方法

    C#圖像處理之木刻效果實(shí)現(xiàn)方法

    這篇文章主要介紹了C#圖像處理之木刻效果實(shí)現(xiàn)方法,可實(shí)現(xiàn)類似木刻效果的黑白照效果,需要的朋友可以參考下
    2015-04-04
  • 如何隨機(jī)選取一個(gè)機(jī)器的ip

    如何隨機(jī)選取一個(gè)機(jī)器的ip

    此方法可用于當(dāng)需要負(fù)載均衡時(shí),即想選擇多臺(tái)機(jī)器來處理程序執(zhí)行。 隨機(jī)的選擇一臺(tái)機(jī)器來處理。
    2013-03-03
  • C#獲取漢字字符串拼音首字母的方法

    C#獲取漢字字符串拼音首字母的方法

    這篇文章主要介紹了C#獲取漢字字符串拼音首字母的方法,實(shí)例分析了C#操作漢字及字符串的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • C#實(shí)現(xiàn)折半查找算法

    C#實(shí)現(xiàn)折半查找算法

    這篇文章介紹了C#實(shí)現(xiàn)折半查找的算法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • C#窗口轉(zhuǎn)向方式(由一個(gè)窗口,跳轉(zhuǎn)到另一個(gè)窗口)

    C#窗口轉(zhuǎn)向方式(由一個(gè)窗口,跳轉(zhuǎn)到另一個(gè)窗口)

    這篇文章主要介紹了C#窗口轉(zhuǎn)向方式(由一個(gè)窗口,跳轉(zhuǎn)到另一個(gè)窗口)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • C#使用HtmlAgilityPack組件解析html文檔

    C#使用HtmlAgilityPack組件解析html文檔

    這篇文章介紹了C#使用HtmlAgilityPack組件解析html文檔的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06

最新評(píng)論