公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#語言中的 SOLID 原則

admin
2024年8月28日 21:58 本文熱度 1169

SOLID 原則是一套指南,可以幫助開發(fā)人員創(chuàng)建更易于維護、易于理解和靈活的軟件。這些原則是由 Robert C. Martin(Uncle Bob)提出的,并在面向對象編程社區(qū)中被廣泛采用。在本文中,我們將探討每個 SOLID 原則,并了解如何在 C# 中應用它們。

1. Single Responsibility Principle (SRP)

定義:一個類應該只有一個改變的原因,這意味著它應該只有一個工作或職責。

說明:SRP 旨在通過確保每個類處理單個功能來解耦代碼。這使得代碼更易于理解、測試和維護。

public class Invoice  
{  
   public void GenerateInvoice()  
   {  
       // Code to generate invoice  
   }  
 
   public void PrintInvoice()  
   {  
       // Code to print invoice  
   }  
}

在這里,該類有兩個職責:生成和打印發(fā)票。為了遵守 SRP,我們應該將這些職責分開:Invoice

public class InvoiceGenerator  
{  
   public void GenerateInvoice()  
   {  
       // Code to generate invoice  
   }  
}  
 
public class InvoicePrinter  
{  
   public void PrintInvoice()  
   {  
       // Code to print invoice  
   }  
}

2. Open/Closed Principle (OCP)

定義:軟件實體(類、模塊、函數(shù)等)應該開放以供擴展,但要關閉以供修改。

說明:OCP 鼓勵以一種允許在不修改現(xiàn)有代碼的情況下擴展行為的方式進行軟件設計。這可以通過抽象來實現(xiàn),例如接口和抽象類。

示例

public class Rectangle  
{  
   public double Width { get; set; }  
   public double Height { get; set; }  
 
   public double Area()  
   {  
       return Width * Height;  
   }  
}  
 
public class Circle  
{  
   public double Radius { get; set; }  
 
   public double Area()  
   {  
       return Math.PI * Radius * Radius;  
   }  
}

為了遵守 OCP,我們可以引入一個接口:

public interface IShape  
{  
   double Area();  
}  
 
public class Rectangle : IShape  
{  
   public double Width { get; set; }  
   public double Height { get; set; }  
 
   public double Area()  
   {  
       return Width * Height;  
   }  
}  
 
public class Circle : IShape  
{  
   public double Radius { get; set; }  
 
   public double Area()  
   {  
       return Math.PI * Radius * Radius;  
   }  
}

現(xiàn)在,可以在不修改現(xiàn)有 or 類的情況下添加新形狀。RectangleCircle

3. Liskov Substitution Principle (LSP)

定義:子類型必須可以替換其基本類型,而不改變程序的正確性。

說明:LSP 確保派生類在不更改其行為的情況下擴展基類。此原則對于維護可靠的繼承層次結構至關重要。

示例

public class Bird  
{  
   public virtual void Fly()  
   {  
       // Fly  
   }  
}  
 
public class Penguin : Bird  
{  
   public override void Fly()  
   {  
       throw new NotSupportedException("Penguins can't fly.");  
   }  
}

在此示例中,違反了 LSP,因為它無法飛行。更好的方法是創(chuàng)建一個單獨的層次結構:Penguin

public abstract class Bird  
{  
   public abstract void Move();  
}  
 
public class FlyingBird : Bird  
{  
   public override void Move()  
   {  
       // Fly  
   }  
}  
 
public class NonFlyingBird : Bird  
{  
   public override void Move()  
   {  
       // Walk  
   }  
}

4. Interface Segregation Principle (ISP)

定義:不應強迫客戶端依賴于他們不使用的接口。

說明:ISP 主張創(chuàng)建小型的特定接口,而不是大型的通用接口。這樣可以防止實現(xiàn)類被它們不需要的方法所累。

public interface IWorker  
{  
   void Work();  
   void Eat();  
}  
 
public class Worker : IWorker  
{  
   public void Work()  
   {  
       // Work  
   }  
 
   public void Eat()  
   {  
       // Eat  
   }  
}  
 
public class Robot : IWorker  
{  
   public void Work()  
   {  
       // Work  
   }  
 
   public void Eat()  
   {  
       throw new NotImplementedException();  
   }  
}

在此示例中,不需要該方法。我們可以通過拆分接口來遵守 ISP:RobotEat

public interface IWorkable  
{  
   void Work();  
}  
 
public interface IFeedable  
{  
   void Eat();  
}  
 
public class Worker : IWorkable, IFeedable  
{  
   public void Work()  
   {  
       // Work  
   }  
 
   public void Eat()  
   {  
       // Eat  
   }  
}  
 
public class Robot : IWorkable  
{  
   public void Work()  
   {  
       // Work  
   }  
}

5. Dependency Inversion Principle (DIP)

定義:高級模塊不應依賴于低級模塊。兩者都應該依賴于抽象。抽象不應該依賴于細節(jié)。細節(jié)應該取決于抽象。

說明:DIP旨在通過使用抽象(接口或抽象類)來解耦依賴關系,從而減少高級模塊和低級模塊之間的耦合。

示例

public class Light  
{  
   public void TurnOn()  
   {  
       // Turn on the light  
   }  
 
   public void TurnOff()  
   {  
       // Turn off the light  
   }  
}  
 
public class Switch  
{  
   private readonly Light _light;  
 
   public Switch(Light light)  
   {  
       _light = light;  
   }  
 
   public void Operate()  
   {  
       _light.TurnOn();  
   }  
}

為了遵守 DIP,我們可以引入一個接口:Light

public interface ISwitchable  
{  
   void TurnOn();  
   void TurnOff();  
}  
 
public class Light : ISwitchable  
{  
   public void TurnOn()  
   {  
       // Turn on the light  
   }  
 
   public void TurnOff()  
   {  
       // Turn off the light  
   }  
}  
 
public class Switch  
{  
   private readonly ISwitchable _switchable;  
 
   public Switch(ISwitchable switchable)  
   {  
       _switchable = switchable;  
   }  
 
   public void Operate()  
   {  
       _switchable.TurnOn();  
   }  
}

現(xiàn)在,類依賴于抽象而不是具體類。SwitchISwitchableLight

SOLID 原則是設計健壯、可維護和可擴展的面向對象軟件的基本準則。通過在 C# 項目中遵循這些原則,可以創(chuàng)建更易于理解、擴展和維護的代碼。


該文章在 2024/8/29 12:25:13 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業(yè)務管理,結合碼頭的業(yè)務特點,圍繞調度、堆場作業(yè)而開發(fā)的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 福利一区福利二区微拍 | 国产制服丝袜欧美在线观看 | 国产99久久久国产精品免 | 国产成人精品午夜日本亚洲 | 国产午夜理论不卡在线观看 | 成人一级视频毛片 | 精品熟妇av免费久久久久 | 国产精品六区久久综合亚洲av | 国产av无码亚洲一区二区 | 国产午夜激无码 | 国产亚洲高质量一路线二路线 | 精品国产热久久久福利 | av无码人妻 | 国产精品爆乳奶水无码视频免費 | 操国产美| av无码理论片在线观 | 国产精品无码一二区免费 | 国产成人精品男人的天堂下载 | 国产一区视频在线 | 国产一区二区视频在线关看 | av在线亚洲欧洲日产一区二区 | 国产91小视 | av片在| 91高清视频一二三区 | 国产午夜无码 | 国产精品无码一区二区av | 国产a网欧美午夜性 | 国产萌白酱喷水视频在线播放 | 国产91精品福利资源在线观看 | 国产精品高潮av有码久久 | 国产成人调教在线视频 | 国产一区二区免费在线观看 | 2025最新国产精品毛片 | 国产成人精品一区二区三区免费 | 国产一区二区在线亚洲中文在线 | 国产成人刺激视频在线观看 | 国产精品亚洲一区二区无码色 | 国产一区二区三区观看 | 国产av永久无码天堂影院 | 91久久精一区二区三区大全 | 国产欧美精品综合日韩 |