5

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

CLR 要求将interface方法标记为virtual. 如果您没有virtual在源代码中显式标记该方法,则编译器将该方法标记为virtualand sealed

当您标记interface成员virtual编译器抱怨访问修饰符无效时。我的意思是没有访问修饰符对任何内容都有效,interface而不是编译器给他们的默认访问修饰符对吗?谁能给我说清楚?

4

2 回答 2

8

接口(C# 编程指南)

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

关于接口成员的实现:

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

所以你不能使用protected一个实现接口成员。

于 2013-07-11T08:46:18.380 回答
0

不同意你的评论:

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

尤其是因为您提到了 CLR 通过 C#,我确定您有误读。圣经不能错。

编辑:提供更多细节。

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

于 2013-07-11T08:47:55.297 回答