在 C# 8.0 中,接口可以具有某些成员的默认实现。这些实现是明确的,意味着它们不能通过类实例访问,我们必须转换为接口类型才能调用它们。有没有办法在同名的类实例上公开这个实现?可以通过将 this 指针转换为接口类型并调用如下方法来以另一个名称公开它:
void A()
{
((ISomething)this).B();
}
但是,我似乎无法找到一种方法来使用 B 的原始名称公开实现,因为如果我声明一个方法 B,它会被视为实现导致无限递归的接口的方法。有什么方法可以在不复制的情况下公开实现,或者我缺少什么?
澄清一下,我正在寻找一种实现类似特征的功能的方法,即能够将实现从接口直接导入类的公共 API 而无需更改方法名称(大概接口中的名称是最好的)。问题不在于如何以类的用户身份调用该方法,而是如何使其成为该类的公共 API 的一部分。
扩展方法是一种解决方案,但默认接口实现可以访问受保护的成员并且可以重载。