Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 48

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 42 43 44 45 46 47 < 48 > 49 50 51 52 53 54 .. 320 >> Следующая

OOPS T
Systen. InvAlidCastExceiJtion
at Datatypes-MyDataTypes .Main<S}fStem.String[ ]>
LiL
Рис. 2.12. Ошибка при распаковке
Явная упаковка или распаковка используются в С# только тогда, когда это позволяет повысить производительность вашего приложения. Мы еще встретимся с упаковкой и распаковкой ближе к концу этой главы.
Код приложения DaiaTypes можно найти в подкаталоге Chapter 2.
Значения по умолчанию для встроенных типов данных
Как уже говорилось, у всех встроенных типов данных в мире .NIlT есть свои значения по умолчанию. Когда вы создаете экземпляр его переменным-членам автоматически присваиваются эти значения. В качестве примера мы воспользуемся следующим определением класса:
// В С# при создании класса всем переменны» -членан автоматически присваиваются значения
// по умолчанию, что исключает возможность испольс
class DefValObject і
( public sbyte theSignedByte:
public by\e theByte;
public short- theShort:
public ushort theUShort;
public int thelnt:
public uint theUInt;
public long theLong;
public ulong theULong;
public char theChar:
public float theFloat;
public double theDouble;
¦public bool theBool:
Значения по умолчанию для встроенных типов данных 101
public decimal theDecimal;
public string theStr;
public object theObj;
public static int Main(string[] args;
{
DefValObject V - new DefValObjectO:
return 0; Il На этон месте наншо установить брейкпойнт и посмотреть // значения в окне Autos
S J
Если вы перейдете в режим отладки, то вы сможете убедиться, что сразу же после создания экземпляра класса DefValObject всем переменным-членам будут присвоены значения поумолчанию (рис. 2.13).
m
Нате і value - ¦ Type .—
Rl v fDefauitVali DefadtValuea.ValOb|et

— thesqnedByte ib sbyte
— theByte 0 byte short
ushort
— their* O mt
— theUInt 0 lint
— trwLong _ Jheuung_____ i'o i bng ' D J-j
- 10' char
¦—_thefloat _ 4o.p float
— )0,0 d&±ta
!false bod
— thedecimal nui 5ystem.0eclmal
— thestr null string
L thaObl nun System, Object__ц

autos | lc?as из this |
Рис. 2.13. В для всех типов предусмотрены безопасные значения по умолчанию
Однако если вы создаете переменные не внутри класса, а внутри метода, значения по умолчанию для них уже применяться не будут. В этой ситуации вы должны об&зательноприсвоить им начальные значения. Рассмотрим такую ситуацию:
// Ошибка компилятора! Для переменной localInt необходимо присвоить начальное значение public static void MainC)
{
int locallnt;
Console.WriteLine(local Int.ToStringO):
}
Решение проблемы очевидно:
Il Все счастливы и довольны, public static void MainO
int locallnt = 0;
Consol е. WriteLi пе{ 1 оса! Int. ToStri ngO):
}
102 Глава 2 • Основы языка
Из правила, относящегося к обязательному присвоению значений переменным, создаваемых внутри определения метода, есть одно исключение. Если переменная действует как «внешний» параметр — об этом будет рассказано ниже в этой главе, — присваивать начальное значение этой переменной необязательно. В методах, которые определяют такие параметры, подразумевается, что значения таким переменным будут присвоены на уровне вызывающей функции.
Код приложения DefaultValues можно найти в подкаталоге Chapter 2.
Константы
Кроме переменных в программах часто используются их в некотором смысле противоположности — константы. Как и в С, и в C++, в С# константы определяются при помощи ключевого слова const. Константы можно определять и на уровне методов, но гораздо чаще они используются на уровне определений классов. Вот пример:
г.; System; class MyConstants {
Il Эти константы определены на уровне класса
public const int mylntConst = 5;
public const string myStringConst = "I'm a const":
public static void MeinO {
Il Эта константа определена на уровне нетода
const string localConst = "I am a rock, I am an island";
// А теперь мы применяем константы (обратите внимание на указание
// диапазона, в которой они были созданы.
Console.WriteLineC'mylntConst » {U}\nmyStringConst - {1}",
MyConstants.myIntConst,
MyConstants.myStringConst):
Console Wn tel.. і re C "Local constant: localConst):
}
}
Иногда удобно использовать служебный класс, созданный с единственной
лью — служить в качестве хранилища констант. При этом нелишне будет позаботиться о том, чтобы пользователь не смог создать экземпляр этого класса:
// Чтобы запретить создание экзепляров данного класса, достаточно определить конструктор как private.
class MyConstants
{
// Некоторые константы
public const int mylntConst = 5;
public const string myStringConst = "I'm a const";
// А теперь запрети» пользователю coaaasaib экземпляры данного класса.
// ведь единственное назначение этого класса - хранить константы private MyConstants О О
)
Циклы С# 103
Запретить создавать экземпляры данного класса можно еще одним способом: определив класс как абстрактный (при помощи ключевого слова abstract). Подробнее о применении этого ключевого слова — в следующей главе, а пока только пример:
Предыдущая << 1 .. 42 43 44 45 46 47 < 48 > 49 50 51 52 53 54 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100