接口之间的转换是否涉及反射?

时间:2018-09-06 09:25:50

标签: c# reflection casting type-conversion

我有一个空接口IProvider和另一个名为ICountryProvider的接口,该接口继承自IProvider。我在这样声明的字典中存储了各种“提供程序”。

Dictionary<string, IProvider> dic;

现在,当我想获得特定的“提供商”实现时,将其设为ICountryProvider,我将执行以下操作:

var countryProvider = (ICountryProvider)dic["country"];

现在,我担心性能,因为这将在对我的API的每个请求上执行。所以,我想问一下,这是转换操作吗,它涉及到任何与反射相关的操作吗?


另外,我还有其他疑问,如果将这种“转换”的结果称为转换,运行时是否会对其进行缓存?从objectICountryProvier以及从IProviderICountryProvider的转换之间是否存在性能差异?

1 个答案:

答案 0 :(得分:1)

CLR(命令语言运行时)在运行时管理显式强制转换,检查对象类型树以确保强制转换有效,即正在强制转换的对象与该类型兼容。如果此检查失败,它将抛出InvalidCastException以保持类型安全。

据我所知,还没有进行缓存。