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

C#如何访问IProperty<T>接口中带实现体的GetTheValue()方法

你遇到的是C# 8引入的默认接口方法的特性限制:默认实现的接口方法不属于实现类的成员,因此不能直接通过类实例访问,IntelliSense也不会在类实例的成员列表里展示该方法。


如何访问该接口方法

有两种常用方案:

  • 方案1:将实例显式转换为接口类型后调用
// 方式A:调用时强转
var camel = new Animal { Value = "Camel" };
var value = ((IProperty<string>)camel).GetTheValue();

// 方式B:声明变量时直接使用接口类型
IProperty<string> camel = new Animal { Value = "Camel" };
var value = camel.GetTheValue(); // 直接调用即可
  • 方案2:在实现类中转发该方法,之后就可以通过类实例直接访问
class Animal : IProperty<string>
{
    public string Value { get;  set; }
    // 直接转发接口的默认实现,也可根据需求重写逻辑
    public string GetTheValue() => ((IProperty<string>)this).GetTheValue();
}

修改后就可以直接调用:

var camel = new Animal { Value = "Camel" };
var value = camel.GetTheValue(); // 可直接访问

接口中默认实现方法的作用

  • 无侵入式扩展接口:当你需要给已经上线、已经有大量实现类的接口新增公共方法时,不需要挨个修改所有实现类补充实现,只需要在接口层添加默认实现,所有现有实现类可以直接兼容,不会破坏原有代码。
  • 收敛通用逻辑:把所有实现类都通用的逻辑统一放到接口层实现,避免每个实现类重复写相同的代码,后续逻辑迭代只需要修改接口层一处即可。
  • 突破单继承限制:可以通过给多个不相关的类实现同一个带默认方法的接口,给不同类注入相同的公共能力,不需要让这些类继承同一个基类。

内容的提问来源于stack exchange,提问作者Rowan Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:36:05