interface
方法的访问修饰符是什么?它应该是public
或protected
,因为您在实施它们时可以访问它们(这是有道理的)。它也应该是abstract
,因为它们没有实现。但是最近我一直在读一本名为 CLR Via C#的书,关于接口的章节说明如下
CLR要求
interface
方法标记为virtual
。如果未在源代码中将方法明确标记为virtual
,则编译器会将方法标记为virtual
和sealed
。
当您标记interface
成员virtual
编译器时,抱怨访问修饰符无效。我的意思是没有访问修饰符对interface
中的任何内容有效,而不是编译器给它们的默认值?有人能说清楚吗?
答案 0 :(得分:8)
Interfaces (C# Programming Guide)
接口可以包含方法,属性,事件,索引器或任何 这四种成员类型的组合。有关示例的链接,请参阅 相关章节。接口不能包含常量,字段, 运算符,实例构造函数,析构函数或类型。 <强>接口 成员自动公开,并且不能包含任何访问权限 修饰符。成员也不能是静态的。
关于界面成员的实施:
要实现接口成员,的相应成员 实现类必须是公共的,非静态的,并且具有相同的 名称和签名作为接口成员。
因此,您无法使用protected
一个实现接口成员。
答案 1 :(得分:0)
不同意你的评论:
因为你提到CLR通过C#,我确信你读错了。圣经不可错。CLR要求将接口方法标记为虚拟。如果未在源代码中将该方法明确标记为虚拟,则编译器会将该方法标记为虚拟并密封。
编辑:提供更多详细信息。
正如其他人所建议的那样,您不能在接口成员中拥有访问修饰符(或虚拟)。 默认情况下(根据定义)接口内的所有成员都是公共的和抽象的。