I think that in this case your structure is beautiful. You do not want to explicitly implement interfaces using separate properties, because then access to Data via an immutable interface will be different from that used for a mutable interface.
In addition, your actual code is most likely more complex, because in this case there is no ambiguity: you access the Data through the object itself, so interfaces should not be considered.
One solution with an explicit implementation of the interface would be to use a common support field, rather than an automatic property:
private int _data; public int IMyImmutableData.Data { get { return this._data; } } public int IMyMutableData.Data { get { return this._data; } set { this._data = value; } }
source share