业务对象是Foo.cs
如果Foo的属性运行自定义逻辑呢?那么,创建Foo对象是否不是一个坏主意,它可以更改Foo对象内部的数据,并返回我不期望的值?!
public class FooBuilder
{
private string bar = "defaultBar";
private string baz = "defaultBaz";
private string bling = "defaultBling";
public FooBuilder Bar(string value)
{
bar = value;
return this;
}
public FooBuilder Baz(string value)
{
baz = value;
return this;
}
public FooBuilder Bling(string value)
{
bling = value;
return this;
}
public Foo Build()
{
return new Foo {Bar = bar, Baz = baz, Bling = bling};
}
}
如果我理解你的要求。。。
对于proprties来说,执行某些代码比设置后备字段更多是可以的。但是,如果您将一个属性设置为一个值,然后使用getter,发现它返回了与您设置的值不同的值,那么这是出乎意料的。因此,要么在属性中避免这种情况,要么使用对行为/数据变化具有描述性意义的方法。
所以这个IMO是糟糕的
var foo = new Foo();
foo.Bar = "hello bar";
string bar = foo.Bar;
Console.WriteLine(bar); // if this does not print "hello bar" then it is bad/unexpected