方法没有访问修饰符

好的,这是窃听我..我知道我已经读过的地方,谷歌没有帮助。

什么是没有指定访问修饰符的方法的可访问性级别?

void Foo() { //code } 

我想说internal但我不是100%肯定。

types的默认可访问性是internal ,但是该types成员的默认可访问性取决于types。

一般来说,一个类的成员默认是private的,其中一个结构的成员默认是public的。 这因语言而异。 用于C ++的默认结构访问修饰符是公共的,在C#中它们是私有的。

假设这是一个C#方法,因为你有“.net”标签。

人们需要区分“成员”可访问性和“类”可访问性。

是的, internal是默认的类,但private是默认的成员。

对于一个类:如果没有指定访问修饰符,那么Internal是默认值。

对于一种方法:如果没有指定访问修饰符,私有是默认的。

从Anders Hejlsberg 等人 的C#编程语言第三版 ,第435页第10.3.5节(“类成员 – 访问修饰符”):

类成员声明可以具有五种可能的声明可访问性(§3.5.1)中的任何一种: publicprotected internalprotectedinternalprivate 。 除了protected internal组合外,指定多个访问修饰符是编译时错误。 类成员声明不包含任何访问修饰符时,假定为private [强调我的]

然后在第539页的11.2节(“结构成员”)中:

除了§11.3中提到的差异之外,§10.3到§10.14中提供的类成员的描述也适用于struct成员。

11·3节没有提到有关访问修饰符的任何内容,所以我的阅读意味着没有访问修饰符的struct成员默认也是private的。 这符合MSDN所说的和我自己的经验。

等等,还有一件事….

interface方法声明当然是按照定义public的。 所以下面的实现是public ,没有明确的访问修饰符。

 public class MyClass : IEqualityComparer<MyClass> bool IEqualityComparer<MyClass>.Equals(MyClass x , MyClass y) {} } 

类方法是私有的,并在.NET中默认密封。 这意味着该方法仅在类中可见,不能被inheritance类重写。

希望能够从MSDN直接明确所有截图

在这里输入图像说明