为什么C#默认接口实现无法在具体类定义中被识别?
问题解答
问题1:为什么必须用protected bool IFooBar.BoolProperty { get; set; }的格式定义接口属性
接口中声明的protected级别的成员,仅支持通过显式接口实现的方式在实现类中定义,核心原因有两点:
- C#的隐式接口实现要求实现成员的访问级别为
public,无法匹配接口protected成员的访问级别约束 - 接口
protected成员本身的设计就是仅允许在实现类/派生接口的上下文内、通过接口类型访问,显式接口实现的特性刚好匹配这一限制,避免成员被类实例直接对外暴露
问题2:为什么具体类无法识别接口的默认方法实现
默认接口方法的实现归属于接口类型本身,不属于实现类的原生成员,因此无法在实现类中直接通过方法名调用,需要先将当前实例强制转换为对应的接口类型才能访问。
你可以将SomeMethod的代码修改为如下形式即可正常调用(额外注意:原代码的SomeMethod缺少返回值类型定义,也会触发编译错误,示例已补充void返回值):
protected void SomeMethod() { ((IFooBar)this).SampleMethod1("Test String"); }
内容的提问来源于stack exchange,提问作者JohnB
相关产品推荐
相关产品推荐

