C# 如何实现Fluent API - 链式调用的优雅设计
发布时间 - 2026-01-24 00:00:00 点击率:次C#中实现Fluent API的核心是方法链式调用,通过返回this或新上下文对象(如Builder、条件分支后的ActionBuilder)提升可读性;常用场景包括计算链、对象构建、条件配置,并可通过接口泛型增强类型安全与调用顺序引导。
在 C# 中实现 Fluent

1. 基本原理:返回 this
Fluent API 的基础是每个方法操作完后返回 this,允许连续调用其他方法。
public class Calculator
{
private int _value;
public Calculator(int start = 0) => _value = start;
public Calculator Add(int x)
{
_value += x;
return this; // 返回当前实例
}
public Calculator Multiply(int x)
{
_value *= x;
return this;
}
public int Result() => _value;}
使用方式简洁流畅:
var result = new Calculator(5)
.Add(3)
.Multiply(2)
.Result(); // 结果为 16
2. 使用 Builder 模式构建复杂对象
Fluent API 常用于对象构建,避免构造函数参数过多。
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string Email { get; set; }
public override string ToString() => $"{Name}, {Age}岁, 邮箱: {Email}";}
public class PersonBuilder
{
private readonly Person _person = new();
public PersonBuilder SetName(string name)
{
_person.Name = name;
return this;
}
public PersonBuilder SetAge(int age)
{
_person.Age = age;
return this;
}
public PersonBuilder SetEmail(string email)
{
_person.Email = email;
return this;
}
public Person Build() => _person;}
调用示例:
var person = new PersonBuilder()
.SetName("张三")
.SetAge(28)
.SetEmail("zhangsan@example.com")
.Build();
3. 支持上下文切换的高级 Fluent 接口
某些场景需要在链中切换上下文,比如配置一个动作的条件和结果。
public class ConditionBuilder
{
private bool _condition;
public ConditionBuilder When(bool condition)
{
_condition = condition;
return this;
}
public ActionBuilder Then(Action action)
{
if (_condition) action();
return new ActionBuilder(); // 返回新上下文
}}
public class ActionBuilder
{
public ActionBuilder AndThen(Action action)
{
action();
return this;
}
public void Done() { /* 结束链 */ }}
使用方式更具表达性:
new ConditionBuilder()
.When(DateTime.Now.Hour > 12)
.Then(() => Console.WriteLine("下午了"))
.AndThen(() => Console.WriteLine("继续工作"))
.Done();
4. 利用泛型和接口优化类型安全
通过接口约束方法可见性,防止用户在不该调用的地方调用某些方法。
public interface ICanAdd { Calculator Add(int x); }
public interface ICanMultiply { Calculator Multiply(int x); }
public interface ICanGetResult { int Result(); }
public class Calculator : ICanAdd, ICanMultiply, ICanGetResult
{
private int _value;
public Calculator(int start = 0) => _value = start;
public Calculator Add(int x)
{
_value += x;
return this;
}
public Calculator Multiply(int x)
{
_value *= x;
return this;
}
public int Result() => _value;}
虽然 C# 不强制限制链中顺序,但可通过接口组合引导正确使用方式。
基本上就这些。Fluent API 的关键在于“返回可继续操作的对象”,配合清晰命名和合理结构,能让调用代码像自然语言一样流畅。设计时注意职责分离、避免过度嵌套,才能真正实现优雅与实用并存。不复杂但容易忽略。
# c#
# ai
# 邮箱
# 构造函数
# 接口
# class
# public
# private
# 泛型
# 对象
# this
# 链式
# 自然语言
# 链中
# 能让
# 并可
# 可通过
# 更具
# 完后
# 关键在于
# 基本原理
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
手机软键盘弹出时影响布局的解决方法
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
C#如何调用原生C++ COM对象详解
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
微信小程序 canvas开发实例及注意事项
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
简历没回改:利用AI润色让你的文字更专业
想要更高端的建设网站,这些原则一定要坚持!
C++时间戳转换成日期时间的步骤和示例代码
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
Android中AutoCompleteTextView自动提示
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
晋江文学城电脑版官网 晋江文学城网页版直接进入
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
Java解压缩zip - 解压缩多个文件或文件夹实例
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
如何在服务器上配置二级域名建站?
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
JavaScript如何实现倒计时_时间函数如何精确控制
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
javascript中闭包概念与用法深入理解
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
大连 网站制作,大连天途有线官网?
详解jQuery停止动画——stop()方法的使用
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
Laravel怎么使用Intervention Image库处理图片上传和缩放
非常酷的网站设计制作软件,酷培ai教育官方网站?
Laravel怎么使用artisan命令缓存配置和视图
香港服务器WordPress建站指南:SEO优化与高效部署策略
IOS倒计时设置UIButton标题title的抖动问题
javascript基于原型链的继承及call和apply函数用法分析
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
使用spring连接及操作mongodb3.0实例
EditPlus中的正则表达式实战(6)
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
Android okhttputils现在进度显示实例代码
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
Laravel如何实现API速率限制?(Rate Limiting教程)
重庆市网站制作公司,重庆招聘网站哪个好?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
Swift中循环语句中的转移语句 break 和 continue
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】

