using System;
using System.Reflection;
public class Test
{
public static void Main()
{
var yoba = new Yoba();
Console.WriteLine(yoba.Size);
// error CS0200: Property or indexer `Yoba.Size' cannot be assigned to (it is read-only)
// yoba.Size = 5;
var field = typeof (Yoba).GetField("<Size>k__BackingField",
BindingFlags.Instance | BindingFlags.NonPublic);
field.SetValue(yoba, 5);
Console.WriteLine(yoba.Size);
}
}
public class Yoba
{
public int Size { get; } = 2;
}
public class OldYoba
{
private readonly int _size = 2;
public int Size
{
get { return _size; }
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uUmVmbGVjdGlvbjsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQl2YXIgeW9iYSA9IG5ldyBZb2JhKCk7CgkJQ29uc29sZS5Xcml0ZUxpbmUoeW9iYS5TaXplKTsKCQkKCQkvLyBlcnJvciBDUzAyMDA6IFByb3BlcnR5IG9yIGluZGV4ZXIgYFlvYmEuU2l6ZScgY2Fubm90IGJlIGFzc2lnbmVkIHRvIChpdCBpcyByZWFkLW9ubHkpCgkJLy8geW9iYS5TaXplID0gNTsKCQkKCQl2YXIgZmllbGQgPSB0eXBlb2YgKFlvYmEpLkdldEZpZWxkKCI8U2l6ZT5rX19CYWNraW5nRmllbGQiLCAKCQkJQmluZGluZ0ZsYWdzLkluc3RhbmNlIHwgQmluZGluZ0ZsYWdzLk5vblB1YmxpYyk7CgkJCQoJCWZpZWxkLlNldFZhbHVlKHlvYmEsIDUpOwoJCUNvbnNvbGUuV3JpdGVMaW5lKHlvYmEuU2l6ZSk7Cgl9Cn0KCnB1YmxpYyBjbGFzcyBZb2JhCnsKCXB1YmxpYyBpbnQgU2l6ZSB7IGdldDsgfSA9IDI7Cn0KCnB1YmxpYyBjbGFzcyBPbGRZb2JhCnsKCXByaXZhdGUgcmVhZG9ubHkgaW50IF9zaXplID0gMjsKCQoJcHVibGljIGludCBTaXplCgl7CgkJZ2V0IHsgcmV0dXJuIF9zaXplOyB9Cgl9Cn0=