为什么接口成员没有访问修饰符?

25

1
这不会有点违背接口的初衷吗? - user541686
6个回答

34

因为接口在简单的术语中是“向外部世界展示”的视图,既然是为了外部世界而存在,那么将其成员设置为受保护或私有没有任何意义。

换句话说,它是与外部世界签订的合同,指定实现此接口的类执行一定的操作。因此,隐藏其中某些部分毫无意义。

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


1
如果您想让一个公共类实现一个内部接口,但只在内部公开该接口的成员,同时公开一些非接口成员,该怎么办?我想知道微软为什么会禁止这样做。 - Panzercrisis
1
@Panzercrisis,我相信你可以使用EIMI来实现这个目的。 - qqqqqqq

8

接口成员总是公共的,因为接口的目的是使其他类型能够访问一个类或结构。不能应用任何访问修饰符到接口成员。


4

所有接口方法都是公共的。你不能在接口中创建访问修饰符。如果你想使用一个,可以使用抽象类。


4
由于接口的本质,这是一个规范。在.NET规范中,有一条规则指定实现接口的类必须实现该接口的所有成员。如果我们将某个成员标记为私有,则实现该接口的类无法实现该特定成员。


0

接口是编码契约,这正是它不允许在其方法签名中使用除Public之外的任何访问修饰符的原因。 但是一个接口本身可以是Internal而不是private或protected,Internal允许在程序集内部访问,这是完全可以的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接