属性和公共变量

我很难理解属性的逻辑,据我在互联网上看到的那样,使用属性而不是公共变量更为逻辑和安全。但是我想了解属性的逻辑,以便在我脑海中刮目相看

private int myVar;

public int MyProperty
{
    get { return myVar; }
    set { myVar = value; }
}
public int myVar;

使用属性而不是公共变量有什么好处?为什么我不应该在类中编写公共变量并从实例中使用?