C#接口转换...字典查找?

Rya*_*own 2 c#

每次将Object转换为接口时C#都会进行字典查找吗?我认为这是必须的.

可以实现数百个接口的通用对象 - > GetType() - >按名称获取接口(或数字ID,不会在可预测的位置) - >从数组中获取方法指针并保存到转换对象

Eri*_*ert 7

假设我们有:

object x = whatever;
IFoo y = (IFoo)x;
Run Code Online (Sandbox Code Playgroud)

你是正确的指出必须有某种方式,运行时,而不是编译器,确定是成功还是抛出无效的强制转换异常.

运行时如何执行的确切细节是一个实现细节,而且很复杂.运行时使用了许多相当复杂的技术来确保在常见情况下快速进行此测试.此外,CLR的一个有趣特征是参照身份和价值身份是一回事; 如果类型测试成功,那么存储在x和y中的位是相同的.(在C++中通常不是这种情况;相反,对象的不同"视图"会导致不同的指针.)这意味着必须实现其他机制才能有效地处理接口方法的分派.

我没有足够的CLR内部知识或专业知识来准确地向您描述所有这些机制的工作原理.如果您想要更好的答案,也许您可​​以提出更具体的问题.