Global Class不会改变我的价值

时间:2012-04-05 06:12:58

标签: c# winforms static-members

我创建了一个全局类,它在我的程序中保存了我需要的大部分信息,问题是当我更新余额并且我回去检查余额时它保持不变,尽管当我通过代码时,它表明我正在修改它..这是我的全球类

public class Global
{

    public static decimal AccountBalance
    {
        get { return _AccountBalance; }
        set { _AccountBalance = value; }
    }

因此,当我更新帐户时,

Global.AccountBalance  = acct.AccountBalace;

但是如果有人希望看到这样的余额

,我会在稍后显示金额
lblBalance.Text = "Your Balance : " + Global.AccountBalance.ToString("C", ctr);

但是那条线仍然在恢复旧的平衡...任何让我知道我可能做错了什么的帮助都会非常值得赞赏。

2 个答案:

答案 0 :(得分:1)

好的,引起我注意的是:public override bool AdjustAccountBalance 我建议public override表示此代码可以从任何地方调用 在这种情况下,我通常采用肮脏但可靠的方法:

  • 添加属性C:\log.txt setter和Global.AccountBalance方法的所有调用(带有timestamp和stacktrace)的日志记录(到本地文件AdjustAccountBalance,我警告它是脏的:));
  • 重现问题;
  • 挖掘日志并调查对所述方法的所有调用;找到“aha-there-it-is”-code;
  • ???
  • 利润

因此,您的代码看起来与此类似:
助手班:

internal static class LogHelper
{
    public void LogCall(string method, string details, StackFrame[] stackTrace)
    {
        var sb = new StringBuilder();
        sb.Append(DateTie.Now.ToShortTimeString() + ": " method + "{" + details + "}");
        foreach (StackFrame stackFrame in stackTrace)
        {
            sb.AppendLine(stackFrame.GetMethod().Name);
        }

        File.AppendText("C:\\log.txt", sb.ToString());
    }
}

AdjustAccountBalance方法(修正片段):

public override bool AdjustAccountBalance(Account acct, decimal amount, string transType)   
{
.. lots of your code posted in question..
 case "D":
 LogHelper.LogCall("AdjustAccountBalance","D-case",new StackTrace().GetFrames())
 acct.AccountBalace += amount;                           
 Global.AccountBalance  = acct.AccountBalace;                           
 break;                       
 case "W":                           
 if (acct.AccountBalace >= amount)                           
 {
LogHelper.LogCall("AdjustAccountBalance","W-case",new StackTrace().GetFrames())
 acct.AccountBalace -= amount;                               
 Global.AccountBalance = acct.AccountBalace;       

 }                       
 break;   
.. lots of your code posted in question..

 }
AccountBalance类的

Global属性:

public static decimal AccountBalance
 {            
  get { return _AccountBalance; }
  set {
   LogHelper.LogCall("set_AccountBalance","value is " + value,new StackTrace().GetFrames())
  _AccountBalance = value; 
  }        
  }     

希望这会有所帮助......

答案 1 :(得分:0)

当你这样做时:

Global.AccountBalance  = acct.AccountBalace;

什么类型的'帐户?如果它是Global类型,那么该行将不执行任何操作,因为您将静态_帐户余额分配给自身。