You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 04:15:04