1

业务对象是 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};
    }
}
4

1 回答 1

1

如果我明白你在问什么...

属性可以执行一些代码而不是设置支持字段。但是,如果您将一个属性设置为一个值,然后使用 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
于 2012-07-12T21:24:33.850 回答