实例化对象简写法

4

我想知道这是否是一个愚蠢的问题,但无论如何...

考虑以下内容:

this.dataSourceFacade = new DataSourceFacade();

this.SomeGrid.DataSource = this.dataSourceFacade.GetData();

与之相比:

this.SomeGrid.DataSource = new DataSourceFacade().GetData();

如果只在这里使用第二种方法,有什么不妥之处吗?

理查德


这种方法没有问题。 - Eric J.
当项目构建时,请查看生成的 MSIL...我不会感到惊讶,如果两种方式生成相同(或几乎相同)的 MSIL。 - Tim
这位开发者很想有时间去做那件事 :) - Richard
4个回答

0

第二种方法,

this.SomeGrid.DataSource = (new DataSourceFacade()).GetData();

如果您需要在以后设置其他内容、获取其他内容或调用该对象的方法,则会丢失对DataSourceFacade对象的引用。

是的,但对于许多情况,例如加载一堆下拉菜单,这很好。 - Richard

0

从长远来看,这确实使得代码更易于阅读和维护。而且这样做应该只是“好的”。

然而,你只是创建了一个对象实例来调用其中一个方法,我会质疑这个方法是否可以被提取为静态方法。

像这样:

this.SomeGrid.DataSource = DataSourceFacade.GetDate();

在静态实现中,如果可能的话,我会尽量避免实例化不会被使用的对象实例。

这个例子只是一个简单的例子,实际的真正外观在各种情况下使用时完全是不同的。 - Richard

0
我个人喜欢进行单元测试,而这两种方法都会限制您实现这一点的能力。
至少我会创建一个工厂来执行这样的操作。
this.SomeGrid.DataSource = DataSourceFacade.GetDataSource();

或者

this.SomeGrid.DataSource = DataSourceFacade.Factory.GetDataSource()

至少这样你可以添加更新工厂的能力,以便将来进行测试。


我们基本上被集成测试所困扰,但与以前相比,这已经可以接受了 :) - Richard
是的,我们都曾陷入过那种情况。 - drstevens

0
简短明了:第二种方法没有任何问题……在大多数情况下,甚至更可取,因为更清晰(没有不必要的本地变量),更易于阅读和维护 :-)

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