为啥接口成员没有访问修饰符? [复制]

Posted

技术标签:

【中文标题】为啥接口成员没有访问修饰符? [复制]【英文标题】:Why do interface members have no access modifier? [duplicate]为什么接口成员没有访问修饰符? [复制] 【发布时间】:2011-08-27 19:13:31 【问题描述】:

可能重复:Why can't I have protected interface members?

作为标题,在 C# 中。有没有可能有人想要一个受保护的或内部的接口?

【问题讨论】:

这样不会破坏界面的全部意义吗? 【参考方案1】:

因为接口在粗略的术语中是“外部世界的视图”,并且由于它是针对外部世界的,所以将其成员设置为受保护或私有是没有意义的。

或者换句话说,它是一个与外部世界的契约,它指定实现这个接口的类做一些特定的事情。所以,隐藏其中的一部分是没有意义的。

但是,接口本身可以具有访问说明符,例如 protectedinternal 等。因此将“外部世界”限制为“整个外部世界”的子集。

【讨论】:

如果你想让一个公共类实现一个内部接口但只在内部公开该接口的成员,同时公开它的一些非接口成员怎么办?我想知道为什么微软会禁止这样做。 @Panzercrisis,我相信您可以将 EIMI 用于此目的。【参考方案2】:

接口成员始终是公共的,因为接口的目的是使其他类型能够访问类或结构。不能对接口成员应用访问修饰符。

【讨论】:

【参考方案3】:

所有接口方法都是公共的。您不能在界面中创建访问修饰符。如果你想使用一个,请使用 Abstract 类。

【讨论】:

【参考方案4】:

这是由于界面的性质。根据定义,接口是规范。 .NET 规范中的一条规则规定,实现接口的类必须实现该接口的所有成员。 现在,如果我们将成员标记为私有,那么实现类就无法实现该特定成员。

【讨论】:

【参考方案5】:

请看Non Public Members for C# Interfaces

【讨论】:

【参考方案6】:

接口是编码契约,这就是它不允许在其方法签名中除 Public 之外的任何访问修饰符的原因。 但是接口本身可以是内部的,但不是私有的或受保护的,内部允许在程序集中进行访问,这非常好。

【讨论】:

以上是关于为啥接口成员没有访问修饰符? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

C#中接口成员的访问修饰符

Java中成员属性默认访问修饰符是啥

php面向对象-修饰符和抽象类和接口

为啥类或接口不能接收私有或受保护的访问修饰符?

在Java和c#中如果不写访问修饰符,类和类成员默认的是啥访问修饰符?

c++类不声明访问修饰符 默认是啥