IDataParameter[] clonedParameters = new IDataParameter[originalParameters.Length];
int i = 0;
int j = originalParameters.Length;
while (i < j)
{
clonedParameters[i] = (IDataParameter)((ICloneable)originalParameters[i]).Clone();
i++;
}请问一下这段代码中的
clonedParameters[i] = (IDataParameter)((ICloneable)originalParameters[i]).Clone();
这么写的目的是什么
originalParameters[i] 他应该有实作 ICloneable 接口,而且是 Explicit implement
所以要先转型成 ICloneable 然後呼叫他的 Clone 方法,呼叫完成後的回传对象(我猜是 object)
再转型成 IDataParameter 这个接口
你自己其实已经考虑到了!既然它先把参数提取出来,并且缓存起来以便服用,那么它肯定怕用户(你或者其它程序员)通过DbCommand对象找到 Parameters,然后修改它。因为一旦修改了,缓存的东西就修改了,那么以后所有程序就乱了,责任就分不清了。就算你调用(而不修改它),你也只能调用到克隆的对象。