gpt4 book ai didi

c# - 对 petshop 4.0 中的 ICloneable 界面有疑问?

转载 作者:太空宇宙 更新时间:2023-11-03 20:47:27 25 4
gpt4 key购买 nike

在Petshop 4.0的'DBUtility'项目中,抽象类SqlHelper有一个方法'GetCachedParameters':

        public static SqlParameter[] GetCachedParameters(string cacheKey) {
SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];

if (cachedParms == null)
return null;

SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length];

for (int i = 0, j = cachedParms.Length; i < j; i++)
clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone();

return clonedParms;
}

为什么不直接返回 'cachedParms'?

最佳答案

如果直接返回 cachedParms,则调用者可以更改数组的元素。缓存的内容将被有效破坏——下一个使用相同缓存键从缓存中获取参数的调用者将得到意想不到的结果。

编辑:克隆数组本身可以防止元素被不同的参数替换。克隆元素也可以防止参数 objects 发生变化。基本上都是防御性编码。

关于c# - 对 petshop 4.0 中的 ICloneable 界面有疑问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/177836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com