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()