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
相关产品推荐
相关产品推荐

