Books / 3_C#_2005_для_чайников_(Дэвис-2008)
.pdf// Deposit - позволен любой положительный вклад public voi d Deposit(doubl e dAmount)
{
if (dAmount > 0.0)
{
//Округление к ближайшей копейке перед внесением
//вклада
decimal mTemp = (decimal)dAmount; mTemp = Decimal . Round(mTemp , 2 ) ;
mBalance += m T e m p ;
}
// Withdraw - вы можете снять со счета любую сумму, не
//превышающую баланс ; функция возвращает реально снятую
//сумму
public decimal Withdraw(decima l dWithdrawal)
{
if (mBalance <= dWithdrawal)
{
dWithdrawal = m B a l a n c e ;
}
mBalance -= dWithdrawal ; return dWithdrawal ;
// GetString |
- возвращает информацию о состоянии счета в |
|
// виде |
строки |
|
public string GetString() |
||
string |
s = |
String . Format("#{0} = { l : C } " , |
|
|
G e t A c c o u n t N u m b e r ( ) , |
|
|
GetBalance() ) ; |
return |
s; |
|
Внутреннее представление поменялось на использование значений типа decimal, который в любом случае более подходит для работы с банковским счетом, чем тип dou ble. Метод Deposit () теперь применяет функцию Decimal . Round () для округле ния вкладываемой суммы до ближайшей копейки. Вывод программы оказывается таким, как и ожидалось:
Создание |
объекта |
банковского счета |
||
Вклад $123.45 |
|
|
|
|
Счет = |
#1001 |
= |
|
$123 .45 |
Вклад $0.00 |
|
|
|
|
В результате счет |
= |
#1001 = $123 .45 |
||
Нажмите <Enter> |
для |
завершения программы . . . |
Содержимое конструктора BankAccount то же, что и у первоначального метода InitBankAccount (). Однако конструктор имеет некоторые особенности:
он всегда имеет то же имя, что и сам класс;
он не имеет возвращаемого типа, даже типа void;
функция M a i n () не должна вызывать никаких дополнительных функций для инициализации объекта при его создании.
Создание объектов
Теперь посмотрим на конструкторы в деле. Для этого рассмотрим програм му DemonstrateDefaultConstruetor .
// DemonstrateDef a u l t C o n s t r u c t o r - демонстрация |
работы |
||
// конструкторов по |
умолчанию; |
создает класс с |
конструктором |
// и рассматриваем |
несколько сценариев |
|
|
using System; |
|
|
|
namespace DemonstrateDef a u l t C o n s t r u c t o r |
|
||
I |
|
|
|
// MyObject - создание класса |
с "многословным" |
// конструктором и внутренним объектом public class MyObject
I
// Этот член - данные является свойством класса
static MyOtherObject staticObj = n e w M y O t h e r O b j e c t ( ) ;
// Этот член - данные является свойством объекта MyOtherObject d y n a m i c O b j ;
// Конструктор (с обильным выводом на экран) public M y O b j e c t O
{
Console.WriteLine("Начало конструктора M y O b j e c t " ) ;
Console.WriteLine("(Статические члены - данные |
" |
+ |
|
|
"конструируются до вызова этого " + |
||
|
"конструктора)11) ; |
|
|
Console.WriteLine("Теперь динамически создаем |
" |
+ |
|
|
"нестатический ч л е н - д а н н ы е : ") ; |
||
dynamicObj = |
n e w M y O t h e r O b j e c t О ; |
|
|
Console.WriteLine("Завершение конструктора M y O b j e c t " ) ; |
|||
// MyOtherObject |
- у этого класса тоже многословный |
|
|
// конструктор, |
но внутренние члены - данные отсутствуют |
||
public class MyOtherObj ect |
|
|
|
public MyOtherObject () |
|
|
|
{ |
. |
|
|
Console.WriteLine("Конструирование M y O t h e r O b j e c t " ) ; |
Глава 11, Классы |
247 |