如果一个成员是IDisposable,我们应该实现IDisposable

Che*_*hen 4 .net c# asp.net asp.net-mvc idisposable

我认同.但是看看asp.net中的内置类:

public sealed class HttpPostedFile
{
    public Stream InputStream { get; }   // Stream implements IDisposable
    // other properties and methods
}
Run Code Online (Sandbox Code Playgroud)

假设我有一个HttpPostedFile被调用的实例file.由于没有Dispose显式调用的方法,file.InputStream.Dispose()因此在被破坏之前不会被调用,我认为这与原来的内涵相违背IDisposable.我认为正确的实现应包含标准IDisposable实现.因此,如果其中一个成员实现IDisposable,该类也需要实现它.你有什么看法?这看起来有点复杂.

Joe*_*Joe 7

通常,IDisposable如果您拥有属性所代表的资源,则应该实现- 请参阅此问题以获得有关此主题的讨论.

我会说因为HttpPostedFile在处理HTTP请求期间被实例化,所以它不拥有流,因此不会丢弃它.当HTTP请求处理完成时,将处理该流.