Both are same but different.
as long as you are not providing extra definition, both representation behave
same, like below
public int weight { get; set; }
private int _weight;
public int weight
{
get { return _weight;}
set { _weight = value;}
}
but,lets consider the other scenario, what if weight > 40 , you want to define something different. It can be either modify the backing field _weight or it may change the other private variable (_charge) as well.
public int weight
{
get { return _weight; }
set
{
_weight = value;
if (_weight > 40)
_charge = _weight * 2;
else
_charge = _weight * 1;
}
}
private int _charge;
public int Charge
{
get { return _charge; }
set { _charge = value; }
}
It makes a huge difference when you want to apply some business logic on your property just like above.