Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C#_Console.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.4 Mб
Скачать

Лабораторная работа 8.2: Управление ресурсами Упражнение 1. Использование шаблона для удаления объектов

В этом упражнении Вы добавите в класс BankAccount метод Dispose для сохранения информации о транзакциях в файле Transaction.dat. Метод Dispose будет производить итерации по всем транзакциям, находящимся в очереди и сохранять информацию о транзакциях (журнал транзакций) в файле.

  • Создайте в классе BankAccount метод Dispose

  • Откройте проект Finalizers.sln из папки install folder\Labs\Lab09\Starter\Finalizers.

  • Добавьте в объявлении класса BankAccount модификатор sealed и укажите наследование от интерфейса IDisposable. От класса, объявленного с ключевым словом sealed нельзя наследовать. Модификатор sealed добавлен для упрощения реализации метода Dispose.

  • Добавьте объектную переменную disposed типа bool и присвойте ей значение false.

  • В классе BankAccount объявите public void-метод Dispose:

public void Dispose( )

{

}

  • В теле метода Dispose добавьте следующие инструкции:

            • Проверьте значение переменной disposed. Если оно равно true, то просто завершите работу метода и ничего не делайте.

            • Если значение disposed false, создайте новую переменную типа StreamWriter, которая открывает файл Transaction.dat, находящийся в текущей директории в режиме дозаписи. Этого можно добиться, используя метод File.Append:

StreamWriter swFile =File.AppendText("Transactions.Dat");

  • Для записи номера, типа и баланса счета используйте инструкцию WriteLine:

swFile.WriteLine("Account number is {0}", accNo);

swFile.WriteLine("Account balance is {0}", accBal);

swFile.WriteLine("Account type is {0}", accType);

  • Произведите итерации по всем объектам типа BankTransaction, находящимся в очереди tranQueue и запишите сумму, дату и время транзакции. Используйте конструкцию foreach по аналогии с тем, что вы делали в лабораторной работе 8.1.

  • Закройте StreamWriter.

  • Присвойте disposed значение true.

  • Вызовите метод GC.SuppressFinalize.

Итоговый код метода Dispose должен выглядеть следующим образом:

public void Dispose( )

{

if (!disposed)

{

StreamWriter swFile = File.AppendText("Transactions.Dat");

swFile.WriteLine("Account number is {0}", accNo);

swFile.WriteLine("Account balance is {0}", accBal);

swFile.WriteLine("Account type is {0}", accType);

swFile.WriteLine("Transactions:");

foreach(BankTransaction tran in tranQueue)

{

swFile.WriteLine("Date/Time: {0}\tAmount:{1}", tran.When( ), tran.Amount( ));

}

swFile.Close( );

disposed = true;

GC.SuppressFinalize(this);

}

}

  • В классе BankAccount добавьте деструктор, вызывающий метод Dispose.

  • Откомпилируйте проект и исправьте ошибки, если это необходимо.

  • Протестируйте деструктор

  • Откройте файл CreateAccount.cs,

  • Измените код метода Main, используя инструкцию using следующим образом:

using (BankAccount acc1 = new BankAccount( ))

{

acc1.Deposit(100);

acc1.Withdraw(50);

acc1.Deposit(75);

acc1.Withdraw(50);

acc1.Withdraw(30);

acc1.Deposit(40);

acc1.Deposit(200);

acc1.Withdraw(250);

acc1.Deposit(25);

Write(acc1);

}

  • Откомпилируйте проект и исправьте ошибки, если это необходимо.

  • Запустите программу.

  • Откройте текстовый редактор и просмотрите содержимое файла, находящегося в папке install folder\Labs\Lab09\Starter\Finalizers\bin\Debug.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]