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

本文关键字:访问 默认 我对 成员 接口 | 更新日期: 2023-09-27 18:21:52

interface方法的访问修饰符是什么?它应该是publicprotected,因为在实现它们时您可以访问它们(这是有意义的)。它也应该是abstract,因为它们没有实现。但最近我读了一本名为CLR Via C#的书,其中关于接口的章节介绍了以下

CLR要求将interface方法标记为virtual。如果在源代码中未将该方法显式标记为virtual,则编译器会将该方法标记为virtualsealed

当您标记interface成员时,virtual编译器会抱怨访问修饰符无效。我的意思是,除了编译器给它们的默认访问修饰符之外,interface中没有任何访问修饰符是有效的,对吧?有人能帮我说清楚吗?

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

接口(C#编程指南)

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

关于接口成员实现:

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

因此,您无法使用protectedone实现接口成员。

不同意您的评论:

CLR要求将接口方法标记为虚拟。如果您没有在源代码中将该方法显式标记为虚拟,编译器会将该方法标记为虚拟并密封。

特别是因为你提到CLR通过C#,我相信你读错了。圣经不会错的。

编辑:提供更多详细信息。

正如其他人所建议的,在接口成员中不能有访问修饰符(或虚拟)。默认情况下(根据定义),接口中的所有成员都是公共的和抽象的。