类是 .net 中的专用或内部默认值
本文关键字:内部 默认值 专用 net 类是 | 更新日期: 2023-09-27 17:57:01
可能的重复项:
为什么Visual Studio默认不创建公共类?
MSDN 链接告诉我们
http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx
类的默认成员可访问性是私有的
请解释默认情况下它是内部还是私人?
所有成员的默认值为"您可以指定的最私密"1。
因此,默认情况下private
嵌套类型,但默认情况下internal
顶级类型:
namespace Foo
{
class ThisIsInternal
{
class ThisIsPrivate
{
}
}
}
所有类型的规则都是一样的 - 无论是类、接口、结构、枚举还是委托都无关紧要。
1 除了特定的属性获取者/资源库之外,当您使属性更加私密时,您只能明确说明属性的一部分。
// The getter is public, the setter is private
public string Foo { get; private set; }
在你提到的文章中,很明显,如果类在另一个类内,则默认情况下访问将是私有的。访问级别可以更改。
无法将顶级类创建为私有类
类的默认成员可访问性是私有的
您将成员(nested class)
可访问性与non-nested
类可访问性混淆了。我从您在问题中给出的链接中提取了以下内容。
未嵌套在其他类型的顶级类型中只能具有 内部或公共可访问性。这些的默认可访问性 类型是内部的,引用。
默认情况下,嵌套类的可访问性是私有的。
,类有时是内部的(当顶级时),有时是私有的(当嵌套时),这似乎很奇怪。但是,这仅意味着默认情况下所有访问修饰符都具有最大限制性。 这也意味着 private 一词的几乎所有用法都是多余的 - 只有属性访问器上的用法才有意义(它们可以限制对其他非私有属性的访问)。
所以我更愿意将默认值视为一致的默认值 - 即在概念上是私有的,关键字不一致 - internal
有时意味着保持上下文的本地,有时意味着授予对整个程序集的访问权限:-)。 private
几乎总是没有任何意义 - 它是纯粹的样板,因此最好省略(属性访问器除外)。
这是我们的测试对象:
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()
{
}
}
可以看出,默认情况下,顶级类型是内部的。默认情况下,嵌套成员是私有的。