为什么它不会产生错误?如果我尝试在主progrm文件中更改此结构的私有字段,则会生成错误,但不会在结构实现中生成错误.
public struct MyStruct
{
private int privateField;
public int MyField
{
get { return privateField; }
set { if (value >= 0) privateField = value; else value = 0 }
}
public void SomeMethod (MyStyruct s)
{
s.privateField = 10; // no error here.
}
}
Run Code Online (Sandbox Code Playgroud)
首先,这与它是结构体还是类无关 - 或者实际上是字段还是其他成员。
C# 中的可访问性取决于代码所在的位置,而不是它是“这个对象”还是另一个对象。
有关更多详细信息,请参阅 C# 规范的第 3.5 节。例如,从 3.5.2 开始:
成员的可访问域由允许访问成员的程序文本的(可能不相交的)部分组成。
[...]
如果声明的可访问性
M是private, 的可访问性域M是 的程序文本T。