"Fluent接口"维护invokation链中的顺序

Rom*_*kij 2 oop

是否有一种优雅/方便的方式(没有创建许多"空"类或至少它们应该不烦人),以便在编译级别上保持顺序的流畅的插入.

流畅的界面:http: //en.wikipedia.org/wiki/Fluent_interface

想要允许这个编译

var fluentConfig = new ConfigurationFluent().SetColor("blue")
                                           .SetHeight(1)
                                           .SetLength(2)
                                           .SetDepth(3);
Run Code Online (Sandbox Code Playgroud)

并拒绝这一点

var fluentConfig = new ConfigurationFluent().SetLength(2)
                                           .SetColor("blue")
                                           .SetHeight(1)
                                           .SetDepth(3);
Run Code Online (Sandbox Code Playgroud)

Joe*_*ler 8

链中的每个步骤都需要返回一个接口或类,该接口或类仅包含在当前步骤之后有效使用的方法.换句话说,如果必须首先使用SetColor,那么ConfigurationFluent应该只有SetColor方法.然后,SetColor将返回仅具有SetHeight方法的对象,依此类推.

实际上,返回值可以都是相同的实例,ConfigurationFluent但可以转换为由该类显式实现的不同接口.