为啥定义接口的方法和属性前面没有修饰符(public、private、protected)? [复制]

Posted

技术标签:

【中文标题】为啥定义接口的方法和属性前面没有修饰符(public、private、protected)? [复制]【英文标题】:Why there's no modifiers (public, private, protected) in front of methods and properties defining an interface? [duplicate]为什么定义接口的方法和属性前面没有修饰符(public、private、protected)? [复制] 【发布时间】:2011-03-07 21:37:13 【问题描述】:

可能重复:Is there a reason you can not define the access modifier on a method or in an interface?

你好,

我对接口很好奇。假设我有以下接口的定义

public interface IPersone

  string FirstName  get; set; 
  string LastName  get; set; 
  int CalculateAge(int YearOfBirth);

为什么在定义接口的方法和属性前面没有修饰符(public、private、protected)?有什么原因吗?

感谢您的帮助

【问题讨论】:

【参考方案1】:

引用MSDN:接口成员始终是公共的,因为接口的目的是使其他类型能够访问类或结构。

【讨论】:

【参考方案2】:

接口的成员总是公开的。

接口是定义方法和属性的契约,您将始终能够在任何实现该接口的对象上调用这些方法和属性。受保护或私人成员将违反本合同。

【讨论】:

【参考方案3】:

接口是定义其与外部世界交互的类的公共契约。所以其中的所有内容都是隐式公开的。

【讨论】:

【参考方案4】:

由于类不能从接口继承,只能实现它,如果您将方法标记为privateprotected,则实现该接口的类将无法访问这些方法。

不管怎样,如果您需要一个“接口”来拥有受保护和私有成员,您可以改用abstract 基类。

【讨论】:

【参考方案5】:

http://en.wikipedia.org/wiki/Interface

在第一段中它说,“接口是两个系统或工作组之间的交互点。”

默认情况下,接口中定义的任何内容都应该始终是公共的,否则接口的整个概念就会被破坏。

【讨论】:

【参考方案6】:

接口定义对象的公共契约。受保护/私有方法等是实现细节,而不是对象的公共合同的一部分。

您可能想参考Why can't I have protected interface members?。

【讨论】:

以上是关于为啥定义接口的方法和属性前面没有修饰符(public、private、protected)? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

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

面向对象:封装:构造函数;类的主方法;权限修饰符;对象的创建

为啥我们不能在实现两个接口由相同方法组成的类的方法中使用访问修饰符?

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

属性的修饰符不会影响 items.xml 中的数据库,这是为啥呢?

Java 接口中的方法是不是应该使用或不使用公共访问修饰符来声明?