好吧,我实际上并不推荐它,但最接近的方法是使用隐式转换运算符 from FooBuilder
to Foo
:
public static implicit operator Foo(FooBuilder builder)
{
return builder.Build();
}
但是,您需要明确键入变量:
Foo foo = FooBuilder
.WithSomething()
.WithOtherthing();
顺便说一句,尚不清楚您刚刚写的时候是否真的是指这里。我个人更喜欢创建具有可设置属性的构建器,它允许您使用对象初始值设定项。例如:new FooBuilder()
FooBuilder
// With the implicit conversion from FooBuilder to Foo
Foo foo = new FooBuilder { Name = "Fred", Value = 10 };
// Without the implicit conversion
var foo = new FooBuilder { Name = "Fred", Value = 10 }.Build();
这是假设您实际上想要一个单独的FooBuilder
类型。如果您很高兴Foo
为每个“伪突变”创建一个新实例,那么您可以使用 jure 的选项。我个人喜欢单独的Build
方法,因为这意味着您可以在最后执行验证,这意味着您无需担心验证依赖于多个相关属性的操作的顺序。
例如,如果您有一个具有DayOfMonth
和Month
属性的类型,并且您想从“1 月 30 日”更改为“2 月 20 日”,那么在“在每个步骤上创建一个新的验证对象”中,您需要更改月份中的日期首先,然后是月份……但如果您要从“2 月 20 日”到“1 月 30 日”,则必须反过来。使用单独的构建器类型和最终验证所有内容的单个Build
调用的方法意味着您无需担心。