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

时间:2018-03-13 05:29:34

标签: c# interface properties access access-modifiers

默认情况下,接口和实现接口的类中的方法是公共的。他们不需要提到的访问者。

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

4 个答案:

答案 0 :(得分:2)

这不准确 界面中的任何内容都是公共的,即使界面本身是内部的,因此您无法将任何访问修饰符设置为界面的任何成员。

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

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

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

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

答案 1 :(得分:1)

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

  

直接在命名空间内声明的接口可以声明为   公共或内部,就像类和结构一样,接口   默认为内部访问。界面成员始终是公开的   因为接口的目的是使其他类型能够访问   一个类或结构。没有访问修饰符可以应用于接口   成员。

     

枚举成员始终是公共的,并且没有访问修饰符   应用

     

委托表现得像类和结构。默认情况下,他们有   直接在命名空间内声明的内部访问,以及私有   嵌套时访问。

参考这些:
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

答案 2 :(得分:0)

在C#中,Interface作为第三方提供功能,因此它始终是公共成员函数。

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

还为该属性提供访问修饰符有助于使用setter进行只读。

答案 3 :(得分:0)

这将违反接口原则。这样,您可以隐藏在接口中声明的方法及其实现从已实现接口的Class对象。这是不允许的。