Accessing and changing structs as property vs as field
Ok, I'll start my question saying that I understand the evil behind
mutable structs, but I'm working with SFML.net and using a lot of Vector2f
and such structs.
What I don't get it is why I can have, and change the values of, a field
in a class and can't do the same with a property, in the very same class.
Take a look at this code:
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
}
}
}
note: I'll build my own classes to cover the same functionality and keep
with my mutability, but I can't see a technical reason why I can do one
and can't do other.
No comments:
Post a Comment