All of your examples are effectively equivalent in practice, though if you implement as property set/get methods, you have the ability to intervene in the process, for example you could notify that a value was changed;
public class MyClass
{
public event PropertyChangedHandler PropertyChanged;
private string myString;
public string MyString
{
get
{
return myString;
}
set
{
// don't allow same value to be set
if (value == myString) return;
myString = value;
PropertyChanged(this, "MyString");
}
}
}
Other examples might be; add validation logic, add security/authorisation before accepting a set call, return a composite value in a getter.