When I want to make a value type read-only outside of my class I do this:
public class myClassInt { private int m_i; public int i { get { ret
Eric Lippert has a series of articles on Immutability In C# on his blog.
The first article in the series can be found here.
You might also find useful Jon Skeet's answer to a similar question.