I';我对C#接口成员的默认访问修饰符感到困惑
本文关键字:访问 默认 我对 成员 接口 | 更新日期: 2023-09-27 18:21:52
interface
方法的访问修饰符是什么?它应该是public
或protected
,因为在实现它们时您可以访问它们(这是有意义的)。它也应该是abstract
,因为它们没有实现。但最近我读了一本名为CLR Via C#的书,其中关于接口的章节介绍了以下
CLR要求将
interface
方法标记为virtual
。如果在源代码中未将该方法显式标记为virtual
,则编译器会将该方法标记为virtual
和sealed
。
当您标记interface
成员时,virtual
编译器会抱怨访问修饰符无效。我的意思是,除了编译器给它们的默认访问修饰符之外,interface
中没有任何访问修饰符是有效的,对吧?有人能帮我说清楚吗?
接口(C#编程指南)
接口可以包含方法、属性、事件、索引器或任何这四种成员类型的组合。有关示例的链接,请参阅相关章节。接口不能包含常量、字段、,运算符、实例构造函数、析构函数或类型接口成员是自动公开的,不能包含任何访问权限修改器成员也不能是静态的。
关于接口成员实现:
要实现接口成员,实现类必须是公共的、非静态的,并且具有相同的名称和签名作为接口成员。
因此,您无法使用protected
one实现接口成员。
不同意您的评论:
CLR要求将接口方法标记为虚拟。如果您没有在源代码中将该方法显式标记为虚拟,编译器会将该方法标记为虚拟并密封。
特别是因为你提到CLR通过C#,我相信你读错了。圣经不会错的。
编辑:提供更多详细信息。
正如其他人所建议的,在接口成员中不能有访问修饰符(或虚拟)。默认情况下(根据定义),接口中的所有成员都是公共的和抽象的。