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」コードを検索します。
  • ???
  • 利益

したがって、コードは次のようになります。
ヘルパークラス:

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

 }

AccountBalanceGlobalクラス のプロパティ:

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とは何ですか?グローバルタイプの場合、静的な_AccountBalanceをそれ自体に割り当てているため、その行は何もしません。

于 2012-04-05T06:42:43.507 に答える