C#接口属性与默认实现问题:实现类无法访问默认属性
接口默认实现属性无法在实现类中直接访问的原因及解决办法
问题原因
C# 8.0新增的接口默认实现成员,不会被实现类隐式继承。接口里的DefinedProperty是属于接口IBase本身的成员,而非实现类Class的成员。所以在类的方法里直接调用DefinedProperty,编译器会找不到这个成员,触发编译错误。
解决办法
方法1:通过接口类型访问
把当前实例强制转换为接口类型,再访问默认实现的属性:
class Class : IBase { public int Integer { get; set; } public void Foo() { Console.WriteLine(((IBase)this).DefinedProperty); // 正常访问 } }
方法2:在实现类中显式转发该属性
在类里定义同名属性,直接转发接口的默认实现;如果需要自定义逻辑,也可以在这里重写覆盖接口的默认实现:
class Class : IBase { public int Integer { get; set; } public string DefinedProperty => ((IBase)this).DefinedProperty; public void Foo() { Console.WriteLine(DefinedProperty); // 正常访问 } }
内容的提问来源于stack exchange,提问作者Aik
相关产品推荐
相关产品推荐

