我对C#接口成员的默认访问修饰符感到困惑

Dim*_*tri 4 c# clr interface

interface方法的访问修饰符是什么?它应该是public或者protected因为您在实现它们时可以访问它们(这是有道理的).它也应该是abstract因为它们没有实现.但是最近我一直在读一本名为CLR Via C#的书,关于接口的章节说明如下

CLR要求将interface方法标记为virtual.如果未virtual在源代码中明确标记方法,则编译器将方法标记为virtualsealed.

当您标记interface成员virtual编译器时,会抱怨访问修饰符无效.我的意思是没有访问修饰符对任何东西有效interface而不是编译器给它们的默认值吗?有人能说清楚吗?

Mar*_*zek 8

接口(C#编程指南)

接口可以包含方法,属性,事件,索引器或这四种成员类型的任意组合.有关示例的链接,请参阅相关章节.接口不能包含常量,字段,运算符,实例构造函数,析构函数或类型.接口成员自动公开,并且不能包含任何访问修饰符.成员也不能是静态的.

关于接口成员的实现:

要实现接口成员,实现类的相应成员必须是公共的,非静态的,并且具有与接口成员相同的名称和签名.

因此,您无法使用protected一个实现接口成员.