2010-05-26 126 views
36

好的,这是在扰乱我..我知道我已经在某个地方读过它,谷歌没有帮助。没有访问修饰符的方法

未指定访问修饰符的方法的可访问性级别是什么?我想说internal但我不是100%确定。

+0

在哪种语言? – 2010-05-26 23:14:46

+0

@steve抱歉,已添加c#标记。 – 2010-05-26 23:17:07

回答

39

为一个类型的默认可访问性为internal,但该类型的成员默认的无障碍环境取决于类型。

一般而言,类的成员是private默认,其中作为结构的成员是public默认。这因语言而异; C++的默认结构访问修饰符是公共的,而C#则是私有的。

+7

你们是否确定这会倒退?如果我在C#类中放置一个没有访问修饰符的方法,C#3.0编译器会将它构建为一个私有方法。 – 2010-05-26 23:19:43

+1

Steve是正确的。类方法的默认可访问性是'private'。自己尝试一下。 – 2010-05-26 23:28:39

+1

这个答案是正确的。刚刚在VS2010中进行了验证,因为我原本以为这是错误的。 – Donnie 2010-05-26 23:33:18

9

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

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

15

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

5

C#编程语言,第三版由安德斯·海尔斯伯格,部分10.3.5( “类会员 - 访问修饰符”)434页:

一个类成员声明可以具有五种可能的声明可访问性(§3.5.1)中的任何一种:public,protected internal, protected,internalprivate。除protected internal组合外,指定多个访问修饰符时发生编译时错误。 类成员声明不包含任何访问修饰符时,假定为private。然后在部分11.2(“结构成员”)第539页上 [着重矿]

和:

除了在§11.3指出的不同,类成员的描述中10.3节提供通过§10.14也适用于结构成员。

11.3节没有提及访问修饰符什么,所以我的这个读数意味着一个struct的成员没有访问修饰符也private默认。这符合what MSDN says和我自己的经验。

3

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

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

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

btw接口方法不能是私有的 – Dragon 2015-11-28 09:09:43

+0

哦,是的... [建议继承'EqualityComparer',而不是实现接口](https://msdn.microsoft.com/en-us/library/ms132123%28v=vs.110%29.aspx)。请参阅“备注” – radarbob 2015-11-28 22:18:25

0

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

0

希望这直接澄清所有按照截图来自MSDN

enter image description here