我正在编写一个使用 Rfc2898DeriveBytes
的小型 .NET 2.0 兼容程序集。在 .NET 2.0 中,Rfc2898DeriveBytes
没有实现 IDisposable
,而在 .NET 4.0 中,Rfc2898DeriveBytes
实现了 IDisposable
。
我的程序集加载到 .NET 4.0 应用程序和 .NET 2.0 应用程序中。
我是否需要使用 .NET 4.0 Dispose
Rfc2898DeriveBytes
还是可以像使用 MemoryStream
一样忽略它?如果是这样,我如何编写 .NET 2.0 和 .NET 4.0 兼容代码,仅在 .NET 4.0 上调用 Dispose
? (充其量没有反射等等。)
我想不在该类上使用 Dispose
并不危险,因为 IDisposable
来自 abstract
DeriveBytes
-类。
最佳答案
你可以:
Rfc2898DeriveBytes rfc = null;
try
{
var salt = new byte[128];
rfc = new Rfc2898DeriveBytes("password", salt);
}
finally
{
IDisposable disp = rfc as IDisposable;
if (disp != null)
{
disp.Dispose();
}
}
即使使用 Roslyn,编译器也不会删除 as IDisposable
: http://goo.gl/OObkzv (右 Pane ,它已经处于 Release模式,因此优化处于事件状态)
(请注意,我并不是完全复制 using
模式...我已经在 rfc
/try
内部而不是外部初始化了 finally
变量...可能没有实际差异)
关于c# - Rfc2898DeriveBytes 的版本无关代码(在 .NET 4.0 上有 Dispose 但在 2.0 上没有),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31071722/