Search code examples
c#ooppropertiesfield

What is the difference between a field and a property?


In C#, what makes a field different from a property, and when should a field be used instead of a property?


Solution

  • Properties expose fields. Fields should (almost always) be kept private to a class and accessed via get and set properties. Properties provide a level of abstraction allowing you to change the fields while not affecting the external way they are accessed by the things that use your class.

    public class MyClass
    {
        // this is a field.  It is private to your class and stores the actual data.
        private string _myField;
    
        // this is a property. When accessed it uses the underlying field,
        // but only exposes the contract, which will not be affected by the underlying field
        public string MyProperty
        {
            get
            {
                return _myField;
            }
            set
            {
                _myField = value;
            }
        }
    
        // This is an AutoProperty (C# 3.0 and higher) - which is a shorthand syntax
        // used to generate a private field for you
        public int AnotherProperty { get; set; } 
    }
    

    @Kent points out that Properties are not required to encapsulate fields, they could do a calculation on other fields, or serve other purposes.

    @GSS points out that you can also do other logic, such as validation, when a property is accessed, another useful feature.