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

 

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

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

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

a.
Рис. 2.5. Примеры использования параметров форматирования
Конечно, параметры форматирования С# можно применять не только с мет№ дом Systeii.Console.is'riteLігіе(). Те же самые параметры можно использовать для форматирования любых символьных строк, например при использовании статического метода String Format!). Такое средство может оказаться полезным при создании в памяти строки символов с числовыми значениями и последующим отображением этой строки любым способом:
// Используем статический кетод String.Forma«) для создания новой символьной строки string formStr:
forn?tr - String. Format ("Don't you wish you had {0:C} in your account?", 99989,987) Console.Wr і teLine(FormStr);
Код приложения BasicIO можно найти в подкаталоге Chapter 2.
Структурные и ссылочные типы
Как в любом языке программирования, в С# существует множество встроенных типов данных. С помощью этих типов можно представлять целочисленные числа и числа с плавающей запятой, строки символов и логические значения. Если вы пришли из мира О+, нозможно, вас обрадует то, что в мире .NET разрядность всех встроенных типов фиксирована и постоянна. Поэтому, если вы используете тип данных 1 вы можете быть уверенными, что этот тип будет абсолютно ков в любом .NET-совместимом языке программирования.
86 Глава 2 • Основы языка С#
Все типы в С# разделяются на две основные разновидности: структурные типы (value-based) и ссылочные типы (reference-based). К структурными типам относятся все числовые типы данных (int, float и пр.), а также перечисления и структуры. Память для структурных типов выделяется из стека. При присвоении одного структурного типа другому присваивается не сам тип (как область в памяти), а его побитовая копия. Давайте рассмотрим это на примере такой структуры С# (подробнее о структурах будет рассказано дальше в этой главе):
Структуры относятся к слЕУКтузнын типак struct FOO
і
public int x.y;
Теперь мы используем эту структуру в следующей программе:
class VaI«ЭТТ:as:=, t
// Экспериментируем со структурными типами public static int Main(str1ng[] args) {
Il При создании структуры с применением конструктора по умолчанию // использование ключевого слова "new" является необязательным FOO fl - new FOOO: 11.X = 100: fl.y = 100:
Il Присваиваем новому типу FCO <f2) существующй тип FCO (fl) FOO f2 = fl:
// Выводим содержимое fl
Console. WriteLi neCFl. X = {0}". 11.x); Console.WriteLineC'Fl.у = {0}". fl.y):
Il Выводим содержимое f2
Console.WriteLine("F2.x - {0}". f2.x); Console.WriteLine("F2.у - {0}". f2.y);
Il А теперь вносим изменения в f2.x. Они не отразятся на f 1.x Console.WriteLine ("Changing f2.x")r f2.x 900:
II Снова выводим содержимое
Console.WriteLine("F2.x = {0}". f2.x); Console.WriteLineO'Fl.X = {0}". fl.x); return 0;
f
)
Результаты работы программы представлены на рис. 2.6.
Мы создали объект типа FOU с именем fl, который затем был отнесен к другому одному типу FOO и получил имя f2. Поскольку FOO — это структурный тип, в результате в специальной области оперативной памяти - стеке были созданы две копии структуры F00, каждая из которых дальше живет своей собственной отдельной жизнью. Поэтому при изменении значения f 2, X значение fl.x осталось прежним.
Структурные и ссылочные типы 87
г d:\csharpbook\labs\chapt...HHal P
И .x = 1ИИ В
Fi.u = loo а
f2.x = 100 F2.y = 100
Changing (2.x t
f2.x = 900 і : Pt,Я = IULI
SVi': any kv-V to ' і:; ftt
Рис. 2,6. При присвоении одного структурного типа другому происходит присвоение не самого типа, а его полной (побитовой) копии
Ссылочные типы (классы и интерфейсы) ведут себя совершенно ію-друго^у. Память для них выделяется не в стеке, а в области управляемой кучи. При копировании ссылочного типа создается еще одна ссылка, которая указывает на ту же область оперативной памяти. Для того чтобы наглядно это продемонстрировать, изменим определение FOO типа, достаточно заменить одно-единственное слово. Мы превратим структуру FOO в ссылочный тип — класс FOC:
// Классы - это всегда ссылочный тип class FOO
public x,
}
Теперь наша программа работает совсем по-другому, как это показано на рис. 2.7.
I' ¦ d:\csharpboob\labs\chaptef 2\Val...
И . x = 1ИЙ П. у = IHt) р2.х = 1ВЙ РЙ.у = 100 chantfiikf { ¦' ¦ F2-x ¦ VHH Fi-x = 900
Press any hey to continue
LlL
M
Рис 2.7. При присвоении одного ссылочного типа другому оба типа начинают указывать на одну и ту же область оперативной памяти
Поскольку и fl. и f2 теперь — не более чем ссылки на один и тот же диапа.і >и памяти в области управляемой кучи, изменение х через ссылку 2 приводит к тому, что значение х, получаемое через ссылку 1, также изменяется.
{
Структурные и ссылочные типы: исследуем дальше
Прочие отличия структурных и ссылочных типов для наглядности мы сведем в одну таблицу (табл. 2.2). Многие из интригующих вопросов будут потом рассмотрены более подробно.
88 Глава 2 • Основы языка
Таблица 2.2. Сравнение структурных и ссылочных типов
«Интригующий вопрос» Структурные типы
Предыдущая << 1 .. 36 37 38 39 40 41 < 42 > 43 44 45 46 47 48 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100