C# 速记实例化对象

C# 速记实例化对象,c#,C#,我想知道这是不是个愚蠢的问题但不管怎样 考虑: this.dataSourceFacade = new DataSourceFacade(); this.SomeGrid.DataSource = this.dataSourceFacade.GetData(); 与之相比: this.SomeGrid.DataSource = new DataSourceFacade().GetData(); 假设第二种方法是唯一使用它的地方,那么它有什么问题吗 理查德第二种方法 this.SomeGri

我想知道这是不是个愚蠢的问题但不管怎样

考虑:

this.dataSourceFacade = new DataSourceFacade();

this.SomeGrid.DataSource = this.dataSourceFacade.GetData();
与之相比:

this.SomeGrid.DataSource = new DataSourceFacade().GetData();
假设第二种方法是唯一使用它的地方,那么它有什么问题吗

理查德

第二种方法

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

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

从长远来看,它确实使代码更易于阅读和维护。也应该是“好”的

然而,您仅仅是为了调用对象上的单个方法而创建对象的实例,我怀疑是否可以将该方法拉入静态方法

像这样:

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

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

好吧,我个人喜欢单元测试,这两种方法都会限制您这样做的能力

至少我会创建一个工厂来做这样的事情

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


至少通过这种方式,您可以添加在将来以某种方式更新工厂以进行测试的功能。

简短而简单:不,第二种方法没有错。。。在大多数情况下甚至更可取,因为更干净(没有不必要的局部变量)和更好的读取+维护:-)

这种方法没有错。看看项目构建时生成的MSIL……我不会惊讶于看到两种方法生成相同(或几乎相同)的结果MSIL。这位开发人员希望有时间这样做:)我们几乎被集成测试困住了,但与之前的情况相比,没关系:)是的,我们以前都被困住了。这个例子很简单,在各种情况下,实际的立面是完全不同的。是的,但对于很多情况,比如加载一堆下拉列表,这很好。
this.SomeGrid.DataSource = DataSourceFacade.Factory.GetDataSource()