c# – 处理对象(简化)
发布时间:2020-12-16 00:01:20 所属栏目:百科 来源:网络整理
导读:我在Mono重新实现加密转换时发现了这段代码. 我没有修改或简化任何事情 – 实际上它是这样的(有像@ Dispose非托管对象的评论,但实际上没有做任何事情). 现在 – 与IDisposable相关的代码对我来说似乎是多余的.这可以以某种方式完全简化/删除而不会破坏重要的
我在Mono重新实现加密转换时发现了这段代码.
我没有修改或简化任何事情 – 实际上它是这样的(有像@ Dispose非托管对象的评论,但实际上没有做任何事情). 现在 – 与IDisposable相关的代码对我来说似乎是多余的.这可以以某种方式完全简化/删除而不会破坏重要的东西吗? public class ToBase64Transform : ICryptoTransform { private bool disposed; ~ToBase64Transform() { Dispose(false); } public void Clear() { Dispose(true); } void IDisposable.Dispose() { Dispose(true); // Finalization is now unnecessary. GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposed) return; if (disposing) { } disposed = true; } 完整来源位于here. 解决方法
如果它包装了非托管组件,那么这是最合适的实现.
如果没有任何非托管组件,并且它不会被子类化,那么是;你可以删除终结器,让它只是一个简单的Dispose(): public sealed class ToBase64Transform : ICryptoTransform { private bool disposed; public void Dispose() { if (disposed) return; // Dispose managed objects disposed = true; } 如果没有任何托管的一次性组件,那么……只是不要使它实现IDisposable. 我不确定我会期望“Clear()”方法调用“Dispose()”,但也许这是加密流的上下文中的标准. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |