C#Streams的行为类似于指针吗?

时间:2014-10-23 05:25:56

标签: c# pointers stream

我是这堂课

class CacheHelper() {
    private Dictionary<string, MemoryStream> cacher;
    // ... other porps, f's...etc

    public MemoryStream GetImageStream(string fileName)
        {
            if (!cacher.ContainsKey(fileName))
                return null;
            MemoryStream memStream = null;
            cacher.TryGetValue(fileName, out memStream); // TODO
            return memStream;
        }

}

我正在使用它:

Stream fileStream = _cacheHelper.GetImageStream(filePath);

当我完成时,我正在关闭fileStream

if(fileStream!=null)
    fileStream.Dispose();

我不确定在C#中Stream实现下面发生了什么,所以我担心我正在关闭原来的MemoryStream(内部cacher词典中的那个)如果我'关闭fileStream,即在指针之上实现,或者什么。

1 个答案:

答案 0 :(得分:2)

MemoryStream是一个类。所有类都是reference types,这意味着你拥有的变量确实是一种指向实际实例的指针。发生的事情是您在某处传递了内存流的引用。如果您不想关闭该流,则不应该这样做。

更好的实现可能是缓存字节数组或使用缓存本身内部的流处理所有内容。将有状态对象从缓存传递到它所使用的某个地方并期望它保持原始状态并不是一个好的设计。这样很容易犯错误。