0

0

C#怎么写出高质量代码?遵循SOLID原则的C#代码重构技巧

星降

星降

发布时间:2025-11-26 19:12:05

|

573人浏览过

|

来源于php中文网

原创

应用SOLID原则提升C#代码质量:1. 单一职责确保类只负责一项功能;2. 开闭原则通过接口和多态支持扩展而非修改;3. 里氏替换保证子类可安全替换父类;4. 接口隔离拆分臃肿接口为小而专的接口;5. 依赖倒置通过依赖抽象和依赖注入实现解耦;结合重构与DI容器,增强可读性、可维护性与可扩展性。

c#怎么写出高质量代码?遵循solid原则的c#代码重构技巧

写出高质量的C#代码,关键在于代码的可读性、可维护性和可扩展性。SOLID原则是面向对象设计中的五个核心原则,帮助开发者构建灵活、解耦且易于测试的系统。结合C#语言特性,合理应用SOLID原则能显著提升代码质量。

单一职责原则(SRP)

一个类应该只有一个引起它变化的原因。换句话说,每个类只负责一项职责。

- 将不同功能拆分到独立的类中。例如,不要让一个“用户服务”类同时处理数据库操作和发送邮件。 - 使用接口隔离职责,比如将日志记录、数据访问、业务逻辑分别封装。

重构示例:

// 重构前:职责混乱
public class UserService  
{
    public void SaveUser(User user)
    {
        // 保存用户
        File.WriteAllText("users.txt", user.Name);
        // 发送通知
        Console.WriteLine("User saved: " + user.Name);
    }
}

// 重构后:职责分离 public class UserRepository { public void Save(User user) => File.WriteAllText("users.txt", user.Name); } public class NotificationService { public void Notify(string message) => Console.WriteLine(message); }

public class UserService { private readonly UserRepository _repo = new(); private readonly NotificationService _notifier = new();

public void SaveUser(User user)
{
    _repo.Save(user);
    _notifier.Notify("User saved: " + user.Name);
}

}

开闭原则(OCP)

软件实体(类、模块等)应该对扩展开放,对修改关闭。

- 使用抽象(接口或抽象类)定义行为契约。 - 通过继承或组合添加新功能,而不是修改已有代码。 - C#中的多态和依赖注入有助于实现OCP。

重构技巧:

// 定义折扣策略接口
public interface IDiscountStrategy
{
    decimal ApplyDiscount(decimal price);
}

public class RegularDiscount : IDiscountStrategy { public decimal ApplyDiscount(decimal price) => price 0.9m; } public class VIPDiscount : IDiscountStrategy { public decimal ApplyDiscount(decimal price) => price 0.7m; }

public class OrderProcessor { private readonly IDiscountStrategy _strategy;

public OrderProcessor(IDiscountStrategy strategy) => _strategy = strategy;

public decimal CalculatePrice(decimal price) => _strategy.ApplyDiscount(price);

}

新增折扣类型时,无需修改OrderProcessor,只需实现新策略即可。

里氏替换原则(LSP)

子类必须能够替换其基类而不影响程序的正确性。

Ideogram
Ideogram

Ideogram是一个全新的文本转图像AI绘画生成平台,擅长于生成带有文本的图像,如LOGO上的字母、数字等。

下载
- 避免重写父类方法导致行为不一致。 - 不要让子类抛出父类未声明的异常。 - 在C#中,使用abstract class或interface定义通用行为,确保实现一致性。

常见违反场景:正方形继承自长方形,但修改边长导致面积计算异常。应重新设计继承关系或使用组合。

接口隔离原则(ISP)

客户端不应依赖它不需要的接口。

- 将大而全的接口拆分为更小、更具体的接口。 - 比如,不要让一个“设备”接口包含扫描、打印、传真所有方法。 - C#中可用多个细粒度接口代替单一胖接口。

重构示例:

public interface IPrinter { void Print(); }
public interface IScanner { void Scan(); }

public class SimplePrinter : IPrinter { public void Print() => Console.WriteLine("Printing..."); } public class MultiFunctionDevice : IPrinter, IScanner { public void Print() => Console.WriteLine("Multifunction print"); public void Scan() => Console.WriteLine("Scanning..."); }

这样客户端只引用所需接口,避免强制实现无用方法。

依赖倒置原则(DIP)

高层模块不应依赖低层模块,二者都应依赖抽象;抽象不应依赖细节,细节应依赖抽象。

- 使用接口进行解耦。 - 结合依赖注入(DI)容器(如ASP.NET Core内置DI)管理对象生命周期。 - 减少new关键字在高层模块中的直接使用。

示例:

public interface IDataAccess { List GetUsers(); }
public class SqlDataAccess : IDataAccess { /* 实现 */ }
public class UserService
{
    private readonly IDataAccess _dataAccess;
    public UserService(IDataAccess dataAccess) => _dataAccess = dataAccess;
}

UserService不关心具体数据来源,便于替换为内存、文件或其他数据库实现。

基本上就这些。在C#项目中持续应用SOLID原则,配合单元测试、代码审查和重构工具(如ReSharper),能有效提升代码质量。注意:SOLID不是教条,需结合实际场景权衡使用,避免过度设计。

相关专题

更多
go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

54

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

49

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

15

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

15

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

15

2025.11.27

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1011

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

60

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

367

2025.12.29

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

80

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java 教程
Java 教程

共578课时 | 44.9万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号