msdn链接告诉我们
http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx
Class 的默认成员可访问性是私有的
请说明默认情况下是内部还是私有?
msdn链接告诉我们
http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx
Class 的默认成员可访问性是私有的
请说明默认情况下是内部还是私有?
所有成员的默认值是“您可以指定的最私密的” 1。
因此默认情况下是嵌套类型private
,但默认情况下是顶级类型internal
:
namespace Foo
{
class ThisIsInternal
{
class ThisIsPrivate
{
}
}
}
所有类型的规则都是相同的——不管是类、接口、结构、枚举还是委托。
1除了特定的属性 getter/setter 略有例外,当您使属性更加私密时,您只能明确说明属性的一部分。
// The getter is public, the setter is private
public string Foo { get; private set; }
Class 的默认成员可访问性是私有的
您将成员(nested class)
可访问性与non-nested
类可访问性混淆了。我从您在问题中给出的链接中提取了以下内容。
不嵌套在其他类型中的顶级类型只能具有内部或公共可访问性。这些类型的默认可访问性是 internal ,reference。
嵌套类的可访问性默认情况下是私有的。
在您提到的文章中,明确规定如果Class 在另一个 class 内,则默认情况下访问将是私有的。访问级别可以更改。
无法将顶级类创建为私有
这是我们的测试对象:
class AccessibilityTest
{
class Nested {}
struct NestedStruct {}
enum NestedEnum { A }
int Field;
void Method() {}
}
使用 Visual Studio 2012 编译类,然后在自己喜欢的反射工具中反编译。结果是:
internal class AccessibilityTest
{
private class Nested
{
}
[StructLayout(LayoutKind.Sequential, Size = 1)]
private struct NestedStruct
{
}
private enum NestedEnum
{
A
}
private int Field;
private void Method()
{
}
}
可以看出,顶级类型默认是内部的。默认情况下,嵌套成员是私有的。
一个类有时默认是内部的(当顶级时)有时是私有的(当嵌套时),这可能看起来很奇怪。然而,这仅仅意味着默认情况下所有访问修饰符都是最大限制的。这也意味着私有这个词的几乎所有用法都是多余的——只有那些在属性访问器上的用法才有意义(它们可以限制对其他非私有属性的访问)。
所以我更喜欢将默认值视为一致的——即在概念上是私有的,并且关键字不一致——internal
有时意味着保持本地上下文,有时意味着授予对整个程序集的访问权限:-)。而且private
几乎总是没有任何意义——它是纯粹的样板,因此最好省略(属性访问器除外)。