C#修改另一个类的标签

时间:2014-07-05 22:05:04

标签: c# class label editing

我是c#的一个大新手,我陷入了一件烦人的事情。首先,这是我遇到问题的代码:

        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
    }
}

并且:

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

最后:

 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),一切正常但不是真正奇怪的成本。新的僵尸成本在Costs类中计算,ZombieBuy()在Actions类中,然后由我的主窗体中的按钮触发。

1 个答案:

答案 0 :(得分: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对象中,而不是让它负责使用代码。