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

C#中实现含同名抽象属性的双接口:属性归属疑问

C#接口属性实现的场景分析

场景一:独立接口实现

在场景一中,PrattWhitney类的impl公共属性同时实现了IBoeing和IAirbus两个接口的impl成员。
因为这两个接口是完全独立的,它们的impl属性属于互不关联的接口成员。C#编译器会自动将类中签名匹配的公共属性,作为所有同签名接口成员的实现。如果需要为两个接口分别实现不同的逻辑,必须使用显式接口实现,比如:

class PrattWhitney : IBoeing, IAirbus  
{
    int IBoeing.impl { get; set; }
    int IAirbus.impl { get; set; }
}

场景一完整代码:

interface IBoeing 
{
    int impl { get; set; }
}

interface IAirbus 
{
    int impl { get; set; }
}

class PrattWhitney : IBoeing, IAirbus  
{
    public int impl { get; set; }   
}

场景二:继承接口实现

在场景二中,PrattWhitney类的impl公共属性实现的是IAirbus接口的impl成员。
因为IAirbus继承自IBoeing但重新声明了impl属性,这相当于IAirbus隐藏了基接口IBoeing的同名成员。此时类中的公共属性会优先匹配最具体的接口(即IAirbus)的成员,而IBoeing的impl成员如果需要单独实现,同样要通过显式接口实现的方式。

场景二完整代码:

interface IBoeing 
{
    int impl { get; set; }
}

interface IAirbus : IBoeing 
{
    int impl { get; set; }
}

class PrattWhitney : IBoeing, IAirbus 
{
    public int impl { get; set; }   
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:39:40