接口中的方法和实现接口的类中的方法默认为public。它们不需要访问器。
为什么在实现接口的类中,属性需要显式声明public访问修饰符?其他修饰符也不允许。
接口中的方法和实现接口的类中的方法默认为public。它们不需要访问器。
为什么在实现接口的类中,属性需要显式声明public访问修饰符?其他修饰符也不允许。
这并不准确。
接口中的任何内容都是公共的,即使接口本身是内部的,所以您不能为接口的任何成员设置访问修饰符。
在实现接口的类中,任何显式实现接口的成员(属性、方法、事件或索引器)都是公共的,因此您也不能为其设置任何访问修饰符。
但是,任何隐式实现接口的成员都必须指定访问修饰符。
由于接口中的所有内容都是公共的,并且您不能根据其访问修饰符重载方法,因此使用其他修饰符会生成编译错误。
为什么编译器强制要求您将隐式接口实现成员声明为公共的?
嗯,我不确定原因,但我认为这是因为类成员的默认访问修饰符是private
,允许程序员在不指定public
访问修饰符的情况下隐式实现接口意味着c#编译器团队必须投入一些额外的工作才能使其发生,并且(我认为)更重要的是,有可能会让查看代码的任何开发人员感到困惑,因为实现是隐式的,而且在不知道接口的情况下,您无法知道类中的方法是接口的实现还是普通方法。
参考文档:访问修饰符 (C# 编程指南)
在命名空间中直接声明的接口可以声明为 public 或 internal,与类和结构体一样,默认情况下,接口的访问级别为 internal。接口成员始终为 public,因为接口的目的是使其他类型能够访问类或结构体。不能将访问修饰符应用于接口成员。
枚举成员始终为 public,并且不能应用任何访问修饰符。
委托行为类似于类和结构体。默认情况下,在命名空间中直接声明时,它们具有 internal 访问权限,在嵌套时具有 private 访问权限。
这将违反接口的原则。这样,您可以隐藏在接口中声明的方法及其实现,使其不被实现接口的类对象所访问。这是不允许的。