What is the difference in functionality between using a field with get and set methods versus using a property to attribute a value to an object through a class? For example, when setting up a value val in a class, are there any reasons to choose one of the two classes below over the other (other than length of code written and interface compatibility):
class FieldTest { public FieldTest() { } private string val; public void SetVal(string temp) { val = temp; } public string GetVal() { return val; } } Versus
class PropertyTest { public PropertyTest() { } public string val { get; set; } } Tested Usage in Visual Studio 2010:
class TestFunctions { static void Main(string[] args) { FieldTest Test_Fields = new FieldTest(); Test_Fields.SetVal("Test"); string temp_str = Test_Fields.GetVal(); PropertyTest Test_Property = new PropertyTest(); Test_Property.val = "test"; string temp_str_prop = Test_Property.val; System.Windows.Forms.MessageBox.Show("Field: " + temp_str + "\n\nProperty: " + temp_str_prop); } } I know only a field can use ref and out keywords, but the other advantages usually attributed to a property--encapsulation, versioning, etc-- seem to be the same with these two setups.
I've checked articles such as Difference between Property and Field in C# 3.0+ and What is the difference between a Field and a Property in C#?. Though they give good descriptions of the ideas behind properties and fields, I have not been able to find a specific answer to my question.
Thanks in advance for clarification.
EDIT 2015-07-29:
I believe this to be a separate question from other StackOverflow answers, such as those found here, as these answers did not seem to specifically address using fields with their own get and set methods as a replacement for a property.
My statement above, "I know only a field can use ref and out keywords..." comes from answers similar to the following (found here):
"Fields may be used for out / ref parameters, properties may not. Properties support additional
logic – this could be used to implement lazy loading among other things."