默认情况下,接口和实现接口的类中的方法是公共的。他们不需要提到的访问者。
为什么属性,特别是在实现接口的类中,需要提到公共访问修饰符? 无论如何,不允许使用其他修饰符。
答案 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对象。这是不允许的。