编辑:我的问题不是关于 using 块及其工作原理。我的问题是关于两种方法的差异,如下所示。
我正在阅读 CQRS 旅程指南,但我不明白这行代码:
using (repo as IDisposable)
这意味着什么?为什么使用它作为 IDisposable?在典型的 using 块中,不需要将其用作 IDisposable:
using (var repo = this.respositoryFactory()) { // ... }
知道为什么作者用第一种方式而不是第二种方式写它吗?
这是该代码出现的方法:
private Conference.Web.Public.Models.Conference GetConference(string conferenceCode)
{
var repo = this.repositoryFactory();
using (repo as IDisposable)
{
var conference = repo.Query<Conference>()
.First(c => c.Code == conferenceCode);
var conferenceModel =
new Conference.Web.Public.Models.Conference
{
Code = conference.Code,
Name = conference.Name,
Description = conference.Description
};
return conferenceModel;
}
}
知道为什么作者用第一种方式而不是第二种方式写它吗?
这通常是由于对语言特征的误解造成的。您编写它的方式是用 C# 编写它的惯用方式:
using (var repo = this.respositoryFactory())
{
作者的方法唯一真正的优势是repositoryFactory
可能会返回一个未实现的类型IDisposable
。通过编写代码using (repo as IDisposable)
,相同的代码可以处理非一次性类型。
大多数时候,这不是问题。不过,工厂可能会可选地返回一个IDisposable
类型。例如,假设此方法是在泛型类中完成的,并且repositoryFactory
返回了一个IRepository<T>
,类型可能会或可能不会实现IDiposable
,在这种情况下,这种方法可以处理这两种情况,而无需强加IDisposable
对泛型类型的约束。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)