回答
为一个类型的默认可访问性为internal
,但该类型的成员默认的无障碍环境取决于类型。
一般而言,类的成员是private
默认,其中作为结构的成员是public
默认。这因语言而异; C++的默认结构访问修饰符是公共的,而C#则是私有的。
你们是否确定这会倒退?如果我在C#类中放置一个没有访问修饰符的方法,C#3.0编译器会将它构建为一个私有方法。 – 2010-05-26 23:19:43
Steve是正确的。类方法的默认可访问性是'private'。自己尝试一下。 – 2010-05-26 23:28:39
这个答案是正确的。刚刚在VS2010中进行了验证,因为我原本以为这是错误的。 – Donnie 2010-05-26 23:33:18
对于一个类:如果未指定访问修饰符,那么Internal是默认值。
对于方法:如果未指定访问修饰符,则Private是默认值。
是的,internal
是类的默认值,但private
是成员的默认值。
假设这是一个C#方法,因为您有“.net”标记。
人们需要区分“成员”可访问性和“类”可访问性。
- C#中类成员(包括方法)的默认可访问性是私有的。请参阅https://msdn.microsoft.com/en-us/library/ba0a1yw2(v=vs.140).aspx
- 类本身的默认可访问性是内部的。
从C#编程语言,第三版由安德斯·海尔斯伯格等,部分10.3.5( “类会员 - 访问修饰符”)434页:
一个类成员声明可以具有五种可能的声明可访问性(§3.5.1)中的任何一种:
public
,protected internal
,protected
,internal
或private
。除protected internal
组合外,指定多个访问修饰符时发生编译时错误。 当类成员声明不包含任何访问修饰符时,假定为private
。然后在部分11.2(“结构成员”)第539页上 [着重矿]
和:
除了在§11.3指出的不同,类成员的描述中10.3节提供通过§10.14也适用于结构成员。
11.3节没有提及访问修饰符什么,所以我的这个读数意味着一个struct
的成员没有访问修饰符也private
默认。这符合what MSDN says和我自己的经验。
哦,等等,还有一件事....
interface
方法声明顾名思义当然public
的。所以下面的实现是public
,没有明确的访问修饰符。
public class MyClass : IEqualityComparer<MyClass>
bool IEqualityComparer<MyClass>.Equals(MyClass x , MyClass y) {}
}
类方法是私有的,默认情况下在.NET中是封闭的。 这意味着该方法仅在类中可见,不能被继承类重写。
在哪种语言? – 2010-05-26 23:14:46
@steve抱歉,已添加c#标记。 – 2010-05-26 23:17:07