c# - 为什么在 C# 中需要提及访问修饰符来实现接口(interface)属性?

标签 c# interface properties access-modifiers

接口(interface)中和实现接口(interface)的类中的方法默认是公共(public)的。他们不需要提到的访问器。

为什么属性(特别是实现接口(interface)的类中的属性)需要提及 public 访问修饰符? 无论如何,其他修饰符都是不允许的。

最佳答案

这不准确。
接口(interface)中的任何内容都是公共(public)的,即使接口(interface)本身是内部的,因此您不能为接口(interface)的任何成员设置任何访问修饰符。

在实现接口(interface)的类中,显式实现该接口(interface)的任何成员(属性、方法、事件或索引器)都是公共(public)的,您也无法为其设置任何访问修饰符。< br/> 但是任何隐式实现接口(interface)的成员都必须指定访问修饰符。

由于接口(interface)中的所有内容都是公共(public)的,并且您无法根据其访问修饰符重载方法,因此任何其他修饰符都会生成编译错误。

为什么编译器强制您将隐式接口(interface)实现成员声明为公共(public)?

嗯,我不确定原因,但我认为这是因为类成员的默认访问修饰符是 private,并且允许程序员隐式实现接口(interface)而无需指定 public 访问修饰符意味着 c# 编译器团队必须投入一些额外的工作才能实现这一点,并且(我认为)更重要的是,考虑到实现是隐式的,有可能使任何查看代码的开发人员感到困惑如果不知道接口(interface),您就无法知道类中的方法是接口(interface)的实现还是只是常规方法。

关于c# - 为什么在 C# 中需要提及访问修饰符来实现接口(interface)属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49248902/

相关文章:

c# - 如何将 DateTime 转换为 JulianDate?

c# - 无需强制转换即可保存不同类型的阻塞集合的字典

javascript - Angular 错误

javascript - 比较 JavaScript 中的属性名称

swift - 如何使用属性观察者提供的定制?

c# - 没有配置文件的 WCF/服务引用

c# - protobuf-net 不适合哪些场景?

c# - 将一个 child 附加到网格,设置它的行和列

excel - 如何使用 Excel VBA 中的工具

java - 既然Interface不能继承Class,那么 "Object"类方法在java中如何提供给接口(interface)引用呢?