C# 8现在支持接口成员的访问修饰符,但它的使用方法让我感到困惑。看下面这个例子:
public interface IFoobar
{ // these members are all valid
protected string Protected { get; set; }
internal string Internal { get; set; }
static string Static { get; set; }
}
public class Foobar : IFoobar // <-- error, Internal and Protected members not implemented
{
protected string Protected { get; set; }
internal string Internal { get; set; }
static string Static { get; set; } // only this one implements IFoobar
}
我的期望是
Foobar
完全实现IFoobar
,但事实上只有Static
实现了,其他的没有。能否
- 解释它们为什么行为不同(并且与C#8之前的接口成员不同)
- 为这个接口中的每个修饰符给我一个用例?
[编辑]
我知道使用显式接口实现将会实现这些成员,但对于C# 8之前的接口成员,这并不是唯一的方式。为什么这些新成员不同?
string IFoobar.Protected {get;set;}
- Jonathon Chase