没有访问修饰符的方法

Ler*_*ins 40 .net c# encapsulation

好的,这让我烦恼..我知道我已经在某个地方读过它,谷歌没有帮助.

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

void Foo()
{
    //code
} 
Run Code Online (Sandbox Code Playgroud)

我想说,internal但我不是百分百肯定.

Ste*_*idi 43

类型的默认可访问性是internal,但该类型成员的默认可访问性取决于类型.

一般来说,一个成员private在默认情况下,当一个成员结构public默认.这取决于语言; C++的默认结构访问修饰符是公共的,对于C#,它们是私有的.

  • 你们确定这个downvote吗?如果我将方法放在C#类中,没有访问修饰符,则C#3.0编译器将其构建为私有方法. (7认同)
  • 缺省情况下,`struct`的成员在C++中是`public`,但是根据从其他几个答案链接的MSDN页面,`struct`的成员默认在C#中是`private`. (3认同)

Min*_*nyu 18

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

人们需要区分"成员"可访问性和"类"可访问性.


EMP*_*EMP 17

是,internal是类的默认值,但是private成员的默认值.


Sec*_*cko 9

对于类:如果未指定访问修饰符,则内部是默认值.

对于方法:如果未指定访问修饰符,则Private是默认值.


Dan*_*den 7

来自Anders Hejlsberg 等人的C#编程语言,第三版,第434页第10.3.5节("类成员 - 访问修饰符"):

类成员声明可以有五种可能的种声明可访问性中的任何一个(第3.5.1节): ,public,protected internal,protected,internalprivate.除protected internal组合外,指定多个访问修饰符是编译时错误. class-member-declaration不包含任何访问修饰符时,private假设.[强调我的]

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

除了第11.3节中提到的差异之外,第10.3节到第10.14节中提供的类成员的描述也适用于结构成员.

第11.3节没有提到有关访问修饰符的任何内容,因此我对此的阅读意味着struct没有访问修饰符的成员也是private默认的.这符合MSDN所说的和我自己的经验.


rad*_*bob 5

哦等等,还有一件事......

interface方法声明当然是public根据定义的。所以下面的实现是public没有显式访问修饰符的。

public class MyClass : IEqualityComparer<MyClass>
    bool IEqualityComparer<MyClass>.Equals(MyClass x , MyClass y) {}
}
Run Code Online (Sandbox Code Playgroud)