Я знаю, что на этот вопрос уже давно дан ответ, и обсуждение прекратилось, но вот случай, о котором я нигде не упоминал в Интернете, и подумал, что было бы полезно поделиться здесь.
Я использовал это для поддержания неизменности членов, при этом поддерживая сериализацию. Рассмотрим struct
, определенный следующим образом:
public struct SampleStruct : IXmlSerializable
{
private readonly int _data;
public int Data { get { return _data; } }
public SampleStruct(int data)
{
_data = data;
}
#region IXmlSerializableMembers
public XmlSchema GetSchema() { return null; }
public void ReadXml(XmlReader reader)
{
this = new SampleStruct(int.Parse(reader.ReadString()));
}
public void WriteXml(XmlWriter writer
{
writer.WriteString(data.ToString());
}
#endregion
}
Поскольку нам разрешено перезаписывать this
, мы можем поддерживать неизменность _data
, хранящуюся в одном экземпляре. Это дает дополнительное преимущество: при десериализации новых значений вам гарантирован свежий экземпляр, что иногда является хорошей гарантией!
}