一行代码中实例化一个对象并调用一个方法?

7
我有很多类似这样的代码。
var o = new SomeClass().DoSomething(someParam);

这是一个设计缺陷吗?

这个类是一种构建器类。它应该构造其他对象。

4个回答

10

不,那很好 - 特别是当类型用作构建器时,您可能会经常看到它。例如:

string x = new StringBuilder().Append("Foo")
                              .AppendFormat("{0}:{1}", x, y)
                              .ToString();

或者在我的Protocol Buffers移植版中:

Person p = new Person.Builder { Name = "Jon", Age = 35 }.Build();

这里的Person类型是不可变的,但builder类型不是 - 因此您需要创建一个建设者,设置一些属性,然后调用Build方法。


十年后对学习者非常有帮助。 - Benson O.

3

如果在调用方法后不需要该实例,您最好使用 SomeClass 上的静态方法,并以此结束。

var o = SomeClass.DoSomething(someParam);

如果出于任何原因,您绝对需要一个新的实例来执行DoSomething,那么您可以创建一个静态工厂方法,使代码更易读,如下:

var o = SomeClass.GetInstance().DoSomething(someParam)

1

从风格的角度来看这不是问题。 但是如果在调用DoSomething方法后需要构建SomeClass,则会出现问题。


1

这不是有缺陷的设计。我认为唯一的问题在于可读性,如果你的团队其他成员没有使用这种风格,尤其是在使用var时,不要使用它,因为这会使返回值更难理解。对我来说,我个人喜欢它,因为我习惯了从jquery中进行链式操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接