C#修改另一个类的标签

C#修改另一个类的标签,c#,class,label,editing,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 ZCos

我在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
    }
}
以及:

最后:

 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类中,然后由my Main表单中的按钮触发。

您可以定义一个值:

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))); }
}
此属性(编译器在幕后将其转换为方法)将在每次调用时重新计算,而不是在程序第一次加载时仅重新计算一次


我建议采用这种方法而不是继续修改值,因为这将把计算值的逻辑和责任封装到
成本
对象中,而不是让它成为消费代码的责任。

什么不起作用?当你在调试器中一步一步地处理这个问题时,它与你所期望的有什么不同?当我运行它时,当我买一个僵尸时,数学计算的目的是让僵尸的价格增加1.25(第二次代码剪断),但事实并非如此。价格保持在10美元,不变。在第一次代码剪贴中,ZCost的代码都很好,我到处检查,尝试了所有东西,但在购买僵尸后,价格仍然没有变化。我的想法已经结束了,我在哪里可以重新评估它而不将其变成一种方法?我现在不能思考。@user3787560:好吧,如果你不把它变成一个方法(或属性),那么它就不会重新计算。在这种情况下,您需要在需要更改代码的任何时候重新计算它,这意味着在代码中的其他位置复制/粘贴相同的数学表达式。为什么不把它变成一个财产呢?这正是属性的用途。@user3787560:“尽可能组织起来”?那个没什么意义。您可以随意安排代码。在对象上放置属性/方法/构造函数等与在对象上放置值一样容易。
internal static double ZombieCost
{
    get { return (Math.Floor(10 * Math.Pow(1.25, Vars.zombies))); }
}