0

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

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);

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

4

2 回答 2

1

好的,吸引我注意的是: public override bool AdjustAccountBalance
我建议这public override意味着这段代码可以从任何地方调用。
在这种情况下,我通常遵循肮脏但可靠的方法:

  • 添加属性设置器和方法的所有调用(带有时间戳和堆栈跟踪)的日志记录(到本地文件C:\log.txt,我警告这是肮脏的方式:)); Global.AccountBalanceAdjustAccountBalance
  • 重现问题;
  • 挖掘日志并调查对上述方法的所有调用;找到“aha-there-it-is”-代码;
  • ???
  • 利润

因此,您的代码将类似于:
Helper 类:

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

希望这可以帮助 ...

于 2012-04-05T09:16:05.277 回答
0

当你这样做时:

Global.AccountBalance  = acct.AccountBalace;

'acct' 是什么类型的?如果它是 Global 类型,那么该行将什么也不做,因为您将静态 _AccountBalance 分配给它自己。

于 2012-04-05T06:42:43.507 回答