可能重复:
Why Visual Studio doesn’t create a public class by default?
msdn链接告诉我们
http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx
Class的默认成员可访问性是私有的
默认情况下请说明是内部还是私人?
答案 0 :(得分:8)
所有成员的默认值是“您可以指定的最私密” 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; }
答案 1 :(得分:2)
Class的默认成员可访问性是私有的
您将成员(nested class)
辅助功能与non-nested
类辅助功能混淆。我从问题中给出的链接中提取了以下内容。
顶级类型(不嵌套在其他类型中)只能有 内部或公共可访问性。这些的默认可访问性 类型是内部的,reference。
默认情况下,嵌套类可访问性是私有的。
答案 2 :(得分:2)
在您提到的文章中,很明显,如果类位于另一个类中,默认情况下访问权限将为私有。 可以更改访问级别。
无法将顶级课程设为私人
答案 3 :(得分:1)
这是我们的测试科目:
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()
{
}
}
可以看出,默认情况下,顶级类型为内部。默认情况下,嵌套成员私有。
答案 4 :(得分:1)
默认情况下,某个类有时是内部的(顶级),有时是私有的(嵌套时),这似乎很奇怪。但是,这仅仅意味着默认情况下所有访问修饰符都是最大限制的。这也意味着几乎私有一词的所有用法都是多余的 - 只有属性访问者的用法才有意义(他们可以限制访问其他非私有财产)。
所以我更倾向于将默认视为一致的 - 即在概念上是私有的,关键字是不一致的 - internal
有时意味着保持本地上下文,有时意味着授予对整个程序集的访问权限: - )。并且private
几乎总是没有任何意义 - 它是纯粹的样板文件,因此最好省略(除了属性访问器)。