さて、私の注意を引くのは: public override bool AdjustAccountBalance
。
つまりpublic override
、このコードはどこからでも呼び出すことができるということです。
私はそのような場合、私は通常、汚いが信頼できるアプローチに従います:
- プロパティセッターとメソッド のすべての呼び出し(タイムスタンプとスタックトレースを使用)のログを(ローカルファイルに追加します
C:\log.txt
。これは汚い方法です:)) 。Global.AccountBalance
AdjustAccountBalance
- 問題を再現します。
- ログを掘り下げて、言及されたメソッドへのすべての呼び出しを調査します。「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..
}
AccountBalance
Global
クラス のプロパティ:
public static decimal AccountBalance
{
get { return _AccountBalance; }
set {
LogHelper.LogCall("set_AccountBalance","value is " + value,new StackTrace().GetFrames())
_AccountBalance = value;
}
}
お役に立てれば ...