据我所知,如果我们在处理COM
接口,任何简单的转换通常都会触发QueryInterface
例程,该例程用于确定对象是否实际实现了相应的COM
接口。
object whatever;
IComInterface casted = (IComInterface) whatever;
因此,以下代码(取决于编译器和优化)可能会触发内部QueryInterface
对象转换实现:
IComInterface comInteface;
// I guess nothing COM-related happens here, but I might be wrong
object whatever = comInteface;
// This might or might not trigger the 'QueryInterface' call.
IComInterface comInterface2 = (IComInteface) whatever;
问:
假设我有一个通用List<T>
实例:
List<IComInterface> list = new List<IComInterface>();
现在,我是否有强有力的保证以下代码不会触发QueryInterface
基于 - 的演员表?
List<IComInterface> list = new List<IComInterface>();
IComInterface comInterface = (...); // Somehow got it.
list.Add(comInteface);
IComInterface retrieved = list[0];
在此处使用
ArrayList
而不是List<T>
实际上会导致执行强制转换,因为您必须IComInterface
从无类型object
实例中获取相应的内容。但是,对于泛型,我想,一切都应该在没有强制转换的情况下完成,但我实际上并不确定它们在表面下是如何工作的。
是否有可能
List<T>
仍然以某种方式对object
类型进行操作(因此,将QueryInterface
在所描述的场景中调用基于 - 的演员表)?如果上一个问题的答案是“否”,那么是否真的不能保证任何可能的情况都一样
IList<T>
?