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

 

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

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

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

Конечно же. System,]nt16 - это ushort в
class {
MyDataTypes public static int Ma1n(str1ng[] args)
{
Il Работаем с UInrU6 как со структурнын типом
System.UIntlo myUIntl6 = 30000;
98 Глава 2 • Основы языка С*
Console.WriteLineC'Max for an UIntl6 is: (0}". UIntl6.MaxValue): Console.WriteLineCM-m for an UIntl6 is: {O)". UIntl6.MirWalue) Console.WnteLinefYour value is: {U}". myUintl6.ToStringO>: Console. WnteLineC"! am a: {0}", rnyUlntl6.GetType().ToString()).
Il Почти то же самое, но уже используем псевдоним С# ushort // для типа System.Uintl6
ushort myotherUIntl6 = 12000;
Console.WriteLine("\nYour value is: {O)", my0therUIntl6.ToString()); Console.WriteLlneC'I am a: {0}". irryOtherUIntl6.GetTypet).ToStnngO);
0:
}
}
Результат работы этой программы представлен рис.

ІМлх Гої- an Ulntih is: 65535 Піп for an IJ Int lb is: 8
IVduf value is г 30ЙЙЯ [I аіч A: Uliitlb
I іїсті- value is: 120Є9 U an a: Uliitlb I

Рис. 2.11. Экспериментируем с системными типами данных
Избранные заметки о некоторых типах данных
Некоторые системные типы данных ч pt'uVKvr особого пояснения. Первый из этих типов - System .Bool ean. В отличие от С и С++теперь присваивать переменным этого типа действительно можно только два значения — t rue (истинно) и f а 1 se (ложно). Если в С и C++ мы вполне могли присваивать аналогичному логическому типу данных и 0, и 1, и -1, то С# уже такого не допускает:
// Вольница с типом bool закончилась! bool Ь = 0: // Так в С# уже нельзя,
bool Ь2 = -1: // Так тоже нельзя,
bool ЬЗ = true; // a бот так - можно, bool Ь4 = false: Il И так можно.
Еще одна важная вещь, о которой нельзя не упомянуть, — то, что для текстовых данных в С# теперь используются только два типа данных: stringnchar. Думаю, что многие программисты почувствуют невыразимое облегчение, узнав, что отпала потребность в таких замечательных типах данных, как char*,wchar_t*, LPSTR1L PCSTR, BSTR и OL ECH AR.,. Многие программисты согласятся со мной, что операции с текстовыми данными в СОМ и Win32 производились не самым простым способом. В этом отношении .NET, где для работы с текстом предназначены только два типа данных (оба работают с Unicode), — это большой шаг вперед.
Код приложения DataTypes можно найти в подкаталоге Chapter 2.
От структурного типа к ссылочному типу и наоборот: упаковка и распаковка 99
От структурного типа к ссылочному типу и наоборот: упаковка и распаковка
В С# предусмотрен очень простой механизм для преобразования структурного типа в ссылочный. Он получил названиег/пскоеки (boxing). Предположим, что у нас есть переменная простого структурного типа данных — short:
// Создаем переменную типа short и присваиваем ей значение
short s - 25;
А вот как выглядит процесс упаковки — преобразования объекта структурне го типа в ссылочный:
// Упаковываем переменим» s: object objShort = s:
Упаковка — это процесс явного преобразования структурного типа в ссылочный. При этом происходит следующее: в управляемой куче создается новый объект и в него копируются внутренние данные старого объекта из стека (в нашем случае копируется только значение — 25).
Противоположная операция называется распаковкой (unboxing). Распаковка -
это преобразование ссылки на объект в оперативной памяти обратно в структурный тип. Перед выполнением распаковки среда выполнения производит проверку на совместимость между типом объекта в оперативной памяти и тем структурным типом, в который будет производиться распаковка. Например, следующий код будет выполнен успешно только з том случае, если cbjohor: — это действительно ссылка на объект типа short:
Обратная распаковка объекта short anotherShort - (short)objShort;
Если же среда выполнения обнаружит, что мы пытаемся произвести распаковку в неподходящий тип данных, будет сгенерировано исключение InvalidCastExcepti on (про приведение типов - casting и про исключения будет подробнее рассказано
в следующей главе):
// Неверная распаковка!
public static ш Main(string[] args)
t
try
{
Il Мы пытаемся распаковать в тип данных string объект, // исходный тип данных для которого - short! string str = (string)oDjShort:
}
catchtInvalidCastException e)
{
Console.WrіteLinet"LX)PS!\n{0}". e.ToStringO);
}
І"
Результат выполнения wo? программы представлен на рис. 2.12.
100 Глава 2 Основы языка С#
Теперь самое время выяснить следующий вопрос: а когда вообще следует заниматься упаковкой и распаковкой? Ответ таков — не слишком часто. В подавляющем большинстве случаев операции по упаковке и распаковке выполняются компилятором С#полностью автоматически. Например, если вы передаете структурный тип методу, который принимает в качестве параметра упаковка будет произведена безо всякого вашего участия:
.//..¦¦-.¦. что у нас есть такой иетод. public static void Foo( object о) int X = 99;
Foo(x): И Произойдет автоматическая упаковка
D:\CStiflrpBriolt..Labs\Chapter2\DataTypes\bin\Debug\0at... HRD
Tihort s = 25 short is a: Intl&
Boxed is я- iii Si.
short anothei*Shfirt = 25 Unhuxetl object is а: InLlG
Предыдущая << 1 .. 41 42 43 44 45 46 < 47 > 48 49 50 51 52 53 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100