Struct - 访问私有字段

apo*_*pse 3 c# struct

为什么它不会产生错误?如果我尝试在主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)

小智 6

私有成员仅限于类或结构而不是对象.在这种情况下,即使s是不同的对象this,它仍然有效.


Jon*_*eet 5

首先,这与它是结构体还是类无关 - 或者实际上是字段还是其他成员。

C# 中的可访问性取决于代码所在的位置,而不是它是“这个对象”还是另一个对象。

有关更多详细信息,请参阅 C# 规范的第 3.5 节。例如,从 3.5.2 开始:

成员的可访问域由允许访问成员的程序文本的(可能不相交的)部分组成。

[...]

如果声明的可访问性M是private, 的可访问性域M是 的程序文本T。