는 http://csharpindepth.com/Articles/Chapter8/PropertiesMatter.aspx에서 다음 코드를 보자C#에서는 필드를 사용하여 자동 구현 된 속성을 사용하면이 경우 다른 동작이 발생하는 이유는 무엇입니까?
using System;
struct MutableStruct
{
public int Value { get; set; }
public void SetValue(int newValue)
{
Value = newValue;
}
}
class MutableStructHolder
{
public MutableStruct Field;
public MutableStruct Property { get; set; }
}
class Test
{
static void Main(string[] args)
{
MutableStructHolder holder = new MutableStructHolder();
holder.Field.SetValue(10);
holder.Property.SetValue(10);
Console.WriteLine(holder.Field.Value);
Console.WriteLine(holder.Property.Value);
}
}
(앞에서 놓친 또는 지금 밖으로 찍은 것을 읽어 보지 않았 코드에 주석의 부부가 있었다.)
주장에를 그 기사는 출력이 holder.Field
인 경우 10
이지만 holder.Property
인 경우 0
이고 정확한 것으로 확인되었습니다. 나는 왜 그런지 보는데 약간의 어려움을 겪고있다. 자동 구현 된 속성은 구조체가되기 때문에 하나의 특정 필드를 매핑 할 수 있습니다. 구조체이므로 Property
은 즉시 처음부터 완전히 지원 및 설정되는 보조 필드를 갖게됩니다. 차이점이 뭐야?
당신은 이미 차이점이 있습니다, 당신은 코멘트에 적어 두었습니다. 필드의 값을 돌연변이시키고 있지만 속성에서 복사본을 얻고 복사본을 변경하려고합니다. –