Quelle est la différence entre un champ et une propriété ?

Quelle est la différence entre un champ et une propriété ?

Les propriétés exposent les champs. Les champs devraient (presque toujours) être gardés privés dans une classe et accessibles via les propriétés get et set. Les propriétés fournissent un niveau d’abstraction vous permettant de modifier les champs sans affecter la manière externe dont ils sont accédés par les éléments qui utilisent votre classe.

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 fait remarquer que les propriétés ne sont pas obligées d’encapsuler des champs, elles pourraient effectuer un calcul sur d’autres champs, ou servir d’autres objectifs.

@GSS fait remarquer que vous pouvez également ajouter d’autres logiques, comme la validation, lorsqu’une propriété est accédée, une autre fonctionnalité utile.