为什么在 C# 中需要提及实现接口的访问修饰符 属性?

Why in C# does one need to mention the access modifier for implementation of an interface property?

接口中的方法和实现接口的class中的方法默认为public。他们不需要提到的访问器。

为什么属性,特别是在实现接口的 class 中,需要提到 public 访问修饰符? 无论如何都不允许使用其他修饰符。

参考文档:Access Modifiers (C# Programming Guide)

Interfaces declared directly within a namespace can be declared as public or internal and, just like classes and structs, interfaces default to internal access. Interface members are always public because the purpose of an interface is to enable other types to access a class or struct. No access modifiers can be applied to interface members.

Enumeration members are always public, and no access modifiers can be applied.

Delegates behave like classes and structs. By default, they have internal access when declared directly within a namespace, and private access when nested.

参考这些:
Why do interface members have no access modifier?
Access modifiers on interface members in C#
I'm confused about default access modifier of C# interface members

在 C# 中,接口是为作为第三方提供功能而创建的,因此它始终是 public 成员函数。

虽然 class 具有访问修饰符,因此它具有 private、internal、protected,public。

也为 属性 提供访问修饰符有助于使用 setter 制作 read-only。

会违反Interface的原则。通过这种方式,您可以隐藏在接口中声明的方法及其实现来自实现了该接口的 Class 对象。这是不允许的。

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

在实现接口的class中,显式实现接口的任何成员(属性、方法、事件或索引器)是public 并且您也不能为其设置任何访问修饰符。
但是任何 隐式 实现接口的成员都必须指定访问修饰符。

由于接口中的所有内容都是 public,并且您不能根据它们的访问修饰符重载方法,任何其他修饰符都会产生编译错误。

为什么编译器强制你将隐式接口实现成员声明为public?

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