.NET Properties - Use Private Set or ReadOnly Property?
        Posted  
        
            by 
                tgxiii
            
        on Programmers
        
        See other posts from Programmers
        
            or by tgxiii
        
        
        
        Published on 2011-04-29T16:55:37Z
        Indexed on 
            2012/10/08
            15:52 UTC
        
        
        Read the original article
        Hit count: 462
        
In what situation should I use a Private Set on a property versus making it a ReadOnly property? Take into consideration the two very simplistic examples below.
First example:
Public Class Person
    Private _name As String
    Public Property Name As String
        Get
            Return _name
        End Get
        Private Set(ByVal value As String)
            _name = value
        End Set
    End Property
    Public Sub WorkOnName()
        Dim txtInfo As TextInfo = _
            Threading.Thread.CurrentThread.CurrentCulture.TextInfo
        Me.Name = txtInfo.ToTitleCase(Me.Name)
    End Sub
End Class
// ----------
public class Person
{
    private string _name;
    public string Name
    {
        get { return _name; }
        private set { _name = value; }
    }
    public void WorkOnName()
    {
        TextInfo txtInfo = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo;
        this.Name = txtInfo.ToTitleCase(this.Name);
    }
}
Second example:
Public Class AnotherPerson
    Private _name As String
    Public ReadOnly Property Name As String
        Get
            Return _name
        End Get
    End Property
    Public Sub WorkOnName()
        Dim txtInfo As TextInfo = _
            Threading.Thread.CurrentThread.CurrentCulture.TextInfo
        _name = txtInfo.ToTitleCase(_name)
    End Sub
End Class
// ---------------
public class AnotherPerson
{
    private string _name;
    public string Name
    {
        get { return _name; }
    }
    public void WorkOnName()
    {
        TextInfo txtInfo = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo;
        _name = txtInfo.ToTitleCase(_name);
    }
}
They both yield the same results. Is this a situation where there's no right and wrong, and it's just a matter of preference?
© Programmers or respective owner