Tag: 显式接口

为什么在值类型上调用显式接口实现会导致它被装箱?

我的问题与此问题有些相关: generics约束如何阻止使用隐式实现的接口装入值类型? ,但不同,因为它不需要约束来执行此操作,因为它根本不是通用的。 我有代码 interface I { void F(); } struct C : I { void IF() {} } static class P { static void Main() { C x; ((I)x).F(); } } 主要方法编译如下: IL_0000: ldloc.0 IL_0001: box C IL_0006: callvirt instance void I::F() IL_000b: ret 为什么不编译到这个? IL_0000: ldloca.s V_0 IL_0002: call instance void C::IF() IL_0007: […]

为什么使用显式接口实现来调用受保护的方法?

在codeplex中浏览ASP.NET MVC源代码时,我发现有一个类显式实现接口是很常见的。 显式实现的方法/属性然后调用具有相同名称的另一个“受保护的虚拟”方法/属性。 例如, public class MvcHandler : IHttpHandler, IRequiresSessionState { protected virtual bool IsReusable { get { return false; } } bool IHttpHandler.IsReusable { get { return IsReusable; } } } 我现在确定这种编程的好处是什么。 对我来说,我更喜欢隐式实现接口IHttpHandler。 我猜作者只是不希望MvcHandler有一个公共属性IsResuable 。 仅当MvcHandler的实例被视为IHttpHandler时,才能使用属性IsReusable 。 不过,我不确定为什么作者这样做。 有人知道这种界面实现的更多好处吗?