Существуют ситуации, когда я объявляю переменные-члены в верхней части моего класса, а затем объявляю свойство для доступа или установки этой переменной-члена, но я спрашиваю себя, нужно ли свойство, если он будет доступен только для переменной, и установленный внутри класса и не где-то еще, так что в чем преимущество использования свойства для доступа и установки переменной-члена вместо того, чтобы просто делать это непосредственно с самой переменной-членом. Вот пример:
public class Car
{
    int speed; //Is this sufficient enough if Car will only set and get it.
    public Car(int initialSpeed)
    {
        speed = initialSpeed;
    }
    //Is this actually necessary, is it only for setting and getting the member
        //variable or does it add some benefit to it, such as caching and if so,
        //how does caching work with properties.
    public int Speed 
    {
        get{return speed;}
        set{speed = value;}
    }
        //Which is better?
        public void MultiplySpeed(int multiply)
        {
            speed = speed * multiply; //Line 1
            this.Speed = this.Speed * multiply; //Line 2
            //Change speed value many times
            speed = speed + speed + speed;
            speed = speed * speed;
            speed = speed / 3;
            speed = speed - 4;
        }
}
В приведенном выше примере, если у меня нет свойства Speed для установки и получения переменной скорости, и я решаю изменить скорость int на int spd, мне придется менять скорость на spd везде, где она используется, если я использую свойство, такое как Speed для установки и получения скорости, мне просто нужно будет изменить скорость на spd в get и set свойства, так что в моем методе MutilplySpeed, как и выше. Скорость = this.Speed + this.Speed + this.Speed не сломается.