流畅接口的基本特征之一是,通常声明为的方法void
将返回可用的东西,通常是它们所属的类的实例(即this
)。StringBuilder 举例说明了这种约定,虽然它本身并不完全流畅,但它确实为您提供了链式方法调用的便利:
sb.Append("Foo")
.Append("Bar")
.AppendLine();
System.Web.Mvc.TagBuilder
但是,不遵循此约定;方法都是void
。
一种快速而肮脏的整理方法可能是将私有 TagBuilder( _instance
) 封装在一个FluentTagBuilder
类中,然后实现所有相同的方法,但将工作委托给实例并返回this
而不是void
.
实现这一目标的最好的不那么快速和肮脏的方法是什么?继承显然不行,因为方法只会因返回类型而异。如果可能的话,我宁愿保持简单并且不涉及模拟/替换框架。感谢您分享的任何智慧!