【发布时间】:2011-04-10 04:30:40
【问题描述】:
如果我要创建一个像下面这样的新对象,它会默认使用哪个访问修饰符?
Object objectA = new Object();
【问题讨论】:
标签: c# object access-modifiers
如果我要创建一个像下面这样的新对象,它会默认使用哪个访问修饰符?
Object objectA = new Object();
【问题讨论】:
标签: c# object access-modifiers
类的访问说明符是内部的。
变量的访问说明符是私有的。
【讨论】:
默认是私有的。
َََََ
【讨论】:
任何成员都将始终拥有最严格的可用成员 - 因此在这种情况下,objectA 的可访问性是 private。 (假设它是一个实例变量。作为局部变量没有任何意义,因为它们本身没有任何访问规则。)
所以这个:
class Foo
{
Object objectA = new Object();
}
等价于:
internal class Foo
{
private Object objectA = new Object();
}
“默认为最私有”意味着对于类型,可访问性取决于上下文。这个:
class Outer
{
class Nested
{
}
}
等价于:
internal class Outer
{
private class Nested
{
}
}
...因为你不能有一个私有的非嵌套类。
只有一个地方添加显式访问修饰符可以使某些东西比没有它时更私密,那就是在属性声明中:
public string Name { get; set; } // Both public
public string Name { get; private set; } // public get, private set
【讨论】:
private,不是吗?在我看来,这是 OP 的主要问题:成员字段的可访问性。
【讨论】:
类和结构默认声明为内部的!
阅读更多here
【讨论】:
类/类型本身将默认为“内部”。您创建的对象将默认为“私有”。
【讨论】:
void Foo()
{
// private in method scope
Object objectA = new Object();
}
class Bar()
{
// private in class scrope
Object objectA = new Object();
}
【讨论】:
作为班级成员:private。
如果它是在方法体中声明的局部变量,则它在该方法之外没有可访问性。但我猜你已经知道了。
【讨论】: