没有访问修饰符的方法

时间:2010-05-26 23:11:29

标签: c# .net encapsulation

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

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

void Foo()
{
    //code
} 

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

8 个答案:

答案 0 :(得分:41)

类型的默认辅助功能为internal,但该类型成员的默认辅助功能取决于类型。

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

答案 1 :(得分:18)

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

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

答案 2 :(得分:16)

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

答案 3 :(得分:9)

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

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

答案 4 :(得分:5)

来自 C#编程语言,第三版作者:Anders Hejlsberg ,第10.3.5节(“类成员 - 访问修饰符”),第434页:

  

class-member-declaration 可以具有五种可能的已声明可访问性(§3.5.1)中的任意一种:publicprotected internal,{{1 },protectedinternal。除private组合外,指定多个访问修饰符是编译时错误。 class-member-declaration 不包含任何访问修饰符时,假定为protected internal [强调我的]

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

  

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

第11.3节没有提及有关访问修饰符的任何内容,因此我对此的阅读意味着默认情况下,没有访问修饰符的private成员也是struct。这符合what MSDN says和我自己的经验。

答案 5 :(得分:3)

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

根据定义,

interface方法声明当然是public。因此,以下实现是public,没有显式访问修饰符。

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

答案 6 :(得分:0)

类方法是私有的,默认情况下在.NET中是密封的。 这意味着该方法仅在类中可见,并且不能被继承的类覆盖。

答案 7 :(得分:0)

希望这可以直接从MSDN中截取所有屏幕截图

enter image description here