Przechodzę przez książkę Head First C# i nie mogę zrozumieć, dlaczego użyli następującego sposobu, aby utworzyć właściwość. Wydaje się to być niekonsekwentne z konwencją, którą widzę w innych miejscach, także w samej książce.Head First C#: dziwny sposób tworzenia właściwości tylko do odczytu
Rozumiem, że wzorzec dla właściwości tworzących to:
private int myVar;
public int MyProperty
{
get { return myVar; }
set { myVar = value; }
}
Na podstawie powyższego wzoru bym napisał mój kod tak:
private decimal cost;
public decimal Cost
{
get
{
cost = CalculateCostOfDecorations() + (CalculateCostOfBeveragesPerPerson() + CostOfFoodPerPerson) * NumberOfPeople;
if (HealthyOption)
{
cost *= .95M;
}
return cost;
}
}
W książce jest on prezentowany jakby Po:
public decimal Cost
{
get
{
decimal totalCost = CalculateCostOfDecorations();
totalCost += (CalculateCostOfBeveragesPerPerson() + CostOfFoodPerPerson)*NumberOfPeople;
if (HealthyOption)
{
totalCost *= .95M;
}
return totalCost;
}
}
Oba kody działają dobrze w programie. Jaka jest najlepsza praktyka tworzenia takich właściwości? Czy dziesiętny totalCost znajduje się wewnątrz obiektu prywatny? Jeśli tak, dlaczego nie jest ona zadeklarowana przed utworzeniem właściwości?
Ponadto, co jest punktem tworząc dwa wiersze kodu:
decimal totalCost = CalculateCostOfDecorations();
totalCost += (CalculateCostOfBeveragesPerPerson() + CostOfFoodPerPerson)*NumberOfPeople;
kiedy można osiągnąć dokładnie to samo, pisząc:
cost = CalculateCostOfDecorations() + (CalculateCostOfBeveragesPerPerson() + CostOfFoodPerPerson) * NumberOfPeople;
nie ma powodu, aby przechowywać 'cost' jako pole podkładu, ponieważ jest każdorazowo przeliczane na getter jest wywoływany. 'TotalCost' jest zmienną lokalną, nie istnieje poza zakresem gettera, jest tymczasowy do przechowywania wyniku obliczeń do momentu, gdy wartość zostanie zwrócona.Użycie "dziesiętnej" z tą samą nazwą zmiennej dwa razy jest błędem składni i spowoduje błąd podczas próby kompilacji. –
Dziękuję za odpowiedź. Również "dziesiętny" użyty dwukrotnie był literówką, dzięki za wskazanie go. – alegz