При определении переменной в области члена (в вашем случае в методе), имя которой совпадает с именем существующего члена, вы просто скрываете второе и ссылаетесь на первое.
Так в вашем примере:
class Tabletop : Rectangle
{
private double cost;
public Tabletop(double l, double w) : base(l, w) { }
public double GetCost()
{
double cost; // this hides the field
cost = GetArea() * 70;
return cost; // this referts to the variable defined two lines above
}
public void Display()
{
Console.WriteLine("Cost: {0}", cost); // while this refers to the field
}
}
cost
из в GetCost
будет ссылаться на переменную local , а использование cost
в Display
, например, будет ссылаться нав поле .
Это абсолютно нормально.Однако это может привести к путанице и, следовательно, к неожиданному поведению.Вот почему некоторые разработчики склонны использовать this
-квалификатор:
public double GetCost()
{
double cost;
this.cost = GetArea() * 70;
return this.cost;
}
с квалификатором, который вы ссылаетесь на текущий экземпляр, что делает this.
cost` доступом к вашему полю .вместо переменной.