/
aprogrammer
/
dotnet-docs
Обзор
Документация
Войти
/
aprogrammer
/
dotnet-docs
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
docs/csharp/fundamentals/tutorials/snippets/object-oriented-programming/BankAccount.cs
99 строк
3 KB
Bill Wagner
Update tutorials to .NET 6 (#28404)
28 фев 2022, 21:50
Не верифицирован
28 фев 2022, 21:50
0e4df77
Код
Авторство
О чём код?
namespace OOProgramming; public class BankAccount { public string Number { get; } public string Owner { get; set; } public decimal Balance { get { decimal balance = 0; foreach (var item in _allTransactions) { balance += item.Amount; } return balance; } } private static int s_accountNumberSeed = 1234567890; // <ConstructorModifications> private readonly decimal _minimumBalance; public BankAccount(string name, decimal initialBalance) : this(name, initialBalance, 0) { } public BankAccount(string name, decimal initialBalance, decimal minimumBalance) { Number = s_accountNumberSeed.ToString(); s_accountNumberSeed++; Owner = name; _minimumBalance = minimumBalance; if (initialBalance > 0) MakeDeposit(initialBalance, DateTime.Now, "Initial balance"); } // </ConstructorModifications> private readonly List<Transaction> _allTransactions = new(); public void MakeDeposit(decimal amount, DateTime date, string note) { if (amount <= 0) { throw new ArgumentOutOfRangeException(nameof(amount), "Amount of deposit must be positive"); } var deposit = new Transaction(amount, date, note); _allTransactions.Add(deposit); } // <RefactoredMakeWithdrawal> public void MakeWithdrawal(decimal amount, DateTime date, string note) { if (amount <= 0) { throw new ArgumentOutOfRangeException(nameof(amount), "Amount of withdrawal must be positive"); } Transaction? overdraftTransaction = CheckWithdrawalLimit(Balance - amount < _minimumBalance); Transaction? withdrawal = new(-amount, date, note); _allTransactions.Add(withdrawal); if (overdraftTransaction != null) _allTransactions.Add(overdraftTransaction); } protected virtual Transaction? CheckWithdrawalLimit(bool isOverdrawn) { if (isOverdrawn) { throw new InvalidOperationException("Not sufficient funds for this withdrawal"); } else { return default; } } // </RefactoredMakeWithdrawal> public string GetAccountHistory() { var report = new System.Text.StringBuilder(); decimal balance = 0; report.AppendLine("Date\t\tAmount\tBalance\tNote"); foreach (var item in _allTransactions) { balance += item.Amount; report.AppendLine($"{item.Date.ToShortDateString()}\t{item.Amount}\t{balance}\t{item.Notes}"); } return report.ToString(); } // Added for OO tutorial: // <DeclareMonthEndTransactions> public virtual void PerformMonthEndTransactions() { } // </DeclareMonthEndTransactions> }