Bob*_*orn 3 c# idisposable using
编辑:我的问题不是关于使用块及其工作原理.我的问题是关于两种方法的区别,如下所示.
我正在阅读CQRS旅程指南,我不明白这行代码:
using (repo as IDisposable)
Run Code Online (Sandbox Code Playgroud)
那是什么意思?为什么将它用作IDisposable?在典型的使用块中,不需要将其用作IDisposable:
using (var repo = this.respositoryFactory()) { // ... }
Run Code Online (Sandbox Code Playgroud)
知道为什么作者以第一种方式而不是第二种方式编写它?
这是代码出现的方法:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
Ree*_*sey 10
知道为什么作者以第一种方式而不是第二种方式编写它?
这通常是由于对语言功能的误解.你写它的方式是用C#写它的自觉方式:
using (var repo = this.respositoryFactory())
{
Run Code Online (Sandbox Code Playgroud)
作者的方法唯一真正的优点是,如果repositoryFactory可能,可能会返回一个没有实现的类型IDisposable.通过编写代码using (repo as IDisposable),相同的代码可以处理非一次性类型.
大多数时候,这不是问题.但是,工厂可以选择返回IDisposable类型.作为一个例子,假设这个方法是在泛型类中完成的,并repositoryFactory返回一个IRepository<T>,那么类型可能会或可能不会实现IDiposable,在这种情况下,这种方法可以处理这两种情况而不对IDisposable泛型类型施加约束.
| 归档时间: |
|
| 查看次数: |
772 次 |
| 最近记录: |