我创建了一个全局类,它在我的程序中保存了我需要的大部分信息,问题是当我更新余额并且我回去检查余额时它保持不变,尽管当我通过代码时,它表明我正在修改它..这是我的全球类
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);
但是那条线仍然在恢复旧的平衡...任何让我知道我可能做错了什么的帮助都会非常值得赞赏。
答案 0 :(得分:1)
好的,引起我注意的是:public override bool AdjustAccountBalance
我建议public override
表示此代码可以从任何地方调用
在这种情况下,我通常采用肮脏但可靠的方法:
C:\log.txt
setter和Global.AccountBalance
方法的所有调用(带有timestamp和stacktrace)的日志记录(到本地文件AdjustAccountBalance
,我警告它是脏的:)); 因此,您的代码看起来与此类似:
助手班:
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类型,那么该行将不执行任何操作,因为您将静态_帐户余额分配给自身。