2014-07-05 6 views
0

Im Im는 큰 newb를 C#으로 만들었고 Im은 짜증나는 일에 집착했습니다. 마지막으로다른 클래스의 레이블 수정

class Costs 
{ 
    internal static double ZombieCost = (Math.Floor(10 * Math.Pow(1.25, Vars.zombies))); 
} 

그리고 :

 private void Refresher_Tick(object sender, EventArgs e) 
    { 
     LabelInf.Text = "Infected : " + Vars.infected; // Infected 
     ZAmount.Text = "Zombies : " + Vars.zombies; // Zombies 
     ZCost.Text = "Cost : " + Costs.ZombieCost; // Next Zombie Cost 
    } 
} 

그리고 모든이의 첫 번째 코드 필자와 함께 문제를 가지고있다

public static void ZombieBuy() 
    { 
     if (Vars.infected >= Costs.ZombieCost) { 
      Vars.zombies = Vars.zombies + 1; 
      Vars.infected = Vars.infected - Costs.ZombieCost; 
     } 
     else 
     { 
      MessageBox.Show("Not Enough Infected To Sacrifice !","Insufficient Infected"); 
      return; 
     } 
    } 

내가하고 싶은 것을 나는 좀비를 구매하는 경우 , 새로운 비용이 내 레이블 (ZCost)에 표시됩니다. 모든 것이 작동하지만 비용은 정말 이상합니다. 새로운 좀비 비용은 비용 클래스에서 계산되며, ZombieBuy()는 액션 클래스에 포함되어 있으며, 이는 메인 폼의 버튼에 의해 트리거됩니다.

+0

작동하지 않는 기능은 무엇입니까? 디버거에서이 단계를 밟으면 예상과 다른 점은 무엇입니까? – David

+0

좀비를 사면 언제 실행합니까? 수학 계산은 좀비의 가격을 1.25 (제 2 코드 스킵) 더 크게 만들 예정이지만 그다지 중요하지 않습니다. 가격은 10으로 유지되며 변경되지 않습니다. 첫 번째 코드에서 ZCost에 대한 코드를 스 니핑하면 모든 것이 좋지만 모든 곳에서 모든 것이 시도되었지만 좀비를 사면 가격이 변하지 않습니다. – user3787560

답변

1

당신은 값 정의

internal static double ZombieCost = (Math.Floor(10 * Math.Pow(1.25, Vars.zombies))); 

을하지만 어디 당신은 이제까지 그 값을 수정하는 방법은 무엇입니까? 값을 정의하는 표현식은 클래스가 처음 정적으로로드 될 때 으로 평가됩니다. 표현 자체는 저장되지 않고 나중에 다시 평가됩니다.

옵션은 업데이트해야 할 때마다 값을 수정하거나 정적 멤버를 매번 다시 평가되는 메서드으로 바꿉니다. 예를 들어 처음에만 한 번 프로그램로드에 반대로이 속성은 (컴파일러가 무대 뒤에서하는 방법으로 전환하는)마다 다시 평가 될 것이다

internal static double ZombieCost 
{ 
    get { return (Math.Floor(10 * Math.Pow(1.25, Vars.zombies))); } 
} 

그것은, 호출합니다.

값을 계산하는 논리와 책임을 코드 소비의 책임이 아니라 Costs 개체에 캡슐화하므로 값을 수정하는 것보다이 방법을 사용하는 것이 좋습니다.

+0

내 마음이 다 끝났어, 어디에서 다시 평가할 수 있을까? 나는 지금 생각하지 않는다. – user3787560

+0

@ user3787560 : 음, 방법 (또는 속성)으로 만들지 않으면 다시 평가하지 않습니다. 이 경우 코드를 변경하려고 할 때 코드를 다시 계산해야합니다. 이는 동일한 수학 표현식을 코드의 다른 위치에 복사/붙여 넣기하는 것을 의미합니다. 왜 그걸 부동산으로 만들지 않는거야? 이것은 정확히 어떤 속성을위한 것입니까? – David

+0

# 수정, 모든 것이 작동합니다. 도움 데이빗에게 감사드립니다! ;) – user3787560

관련 문제