わかりました、私は変更可能な構造体の背後にある悪を理解していると言って質問を始めますが、私は SFML.net で作業しており、Vector2f やそのような構造体をたくさん使用しています。
私が理解していないのは、クラス内のフィールドを持つことができ、その値を変更でき、まったく同じクラス内のプロパティで同じことを行うことができない理由です。
このコードを見てください:
using System;
namespace Test
{
public struct TestStruct
{
public string Value;
}
class Program
{
TestStruct structA;
TestStruct structB { get; set; }
static void Main(string[] args)
{
Program program = new Program();
// This Works
program.structA.Value = "Test A";
// This fails with the following error:
// Cannot modify the return value of 'Test.Program.structB'
// because it is not a variable
//program.structB.Value = "Test B";
TestStruct copy = program.structB;
copy.Value = "Test B";
Console.WriteLine(program.structA.Value); // "Test A"
Console.WriteLine(program.structB.Value); // Empty, as expected
}
}
}
注:同じ機能をカバーし、可変性を維持するために独自のクラスを構築しますが、一方を実行できて他方を実行できない技術的な理由がわかりません。