实例化对象并在一行中调用方法?

时间:2011-09-01 08:18:04

标签: c#

我有很多像这样的代码

var o = new SomeClass().DoSomething(someParam);

这是一个设计缺陷吗?

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

4 个答案:

答案 0 :(得分:6)

不,没关系 - 特别是你可能会经常看到它用作构建器的类型。例如:

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类型是不可变的,但构建器类型不是 - 所以您创建构建器,设置一些属性,然后调用Build

答案 1 :(得分:3)

如果在调用方法后不需要实例,最好使用SomeClass上的静态方法,最后用

var o = SomeClass.DoSomething(someParam);

如果由于任何原因,您绝对需要一个新实例来执行DoSomething,那么您可以创建一个静态factoy方法,使代码更具可读性:

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

答案 2 :(得分:1)

在风格方面不是问题。 如果在调用DoSomething方法后需要构造的SomeClass,这将是一个问题。

答案 3 :(得分:1)

这不是有缺陷的设计。我要说的唯一的问题是可读性,如果团队的其他成员没有使用这种风格,那么不要使用它特别是 var 因为它使得更难理解返回的内容。对我来说,我个人喜欢它,因为我习惯于从jquery链接。