Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
- Название:ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2007
- Город:Москва • Санкт-Петербург • Киев
- ISBN:ISBN 5-8459-1124-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание краткое содержание
В этой книге содержится описание базовых принципов функционирования платформы .NET, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений .NET. Представлены базовые возможности языка программирования C# 2005, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, а также синтаксис и семантика языка CIL. В книге рассматривается формат сборок .NET, библиотеки базовых классов .NET. файловый ввод-вывод, возможности удаленного доступа, конструкция приложений Windows Forms, доступ к базам данных с помощью ADO.NET, создание Web-приложений ASP.NET и Web-служб XML. Книга содержит множество примеров программного кода, призванного помочь читателю в освоении предлагаемого материала. Программный код примеров можно загрузить с Web-сайта издательства.
ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Console.WriteLine("-› Строка для р3 = {0}", p3.ToString());
Console.WriteLine("-› Строка для р4 = {0}", p4.ToString());
Console.WriteLine("-› Хеш-код для р3 = {0}", р3.GetHashCode());
Console.WriteLine("-› Хеш-код для р4 = {0}", p4.GetHashCode());
if (р3.Equals(p4)) Console.WriteLine("-› Состояния р3 и р4 одинаковы!")
else Console.WriteLine("-› Состояния р3 и р4 различны!");
}

Рис. 3.18. Результаты переопределения членов System.Object
Статические члены System.Object
В завершение нашего обсуждения базового класса .NET, находящегося на вершине иерархии классов, следует отметить, что System.Object определяет два статических члена (Object.Equals() и Object.ReferenceEquals()), обеспечивающих проверку на равенство значений и ссылок соответственно. Рассмотрим следующий программный код.
static void Main(string[] args) {
// Два объекта с идентичной конфигурацией.
Person р3 = new Person("Fred", "Jones", "222-22-2222", 98);
Person p4 = new Person("Fred", "Jones", "222-22-2222", 98);
// Одинаковы ли состояния р3 и р4? ИСТИНА!
Console.WriteLine("Одинаковы ли состояния: р3 и р4: {0} ", object.Equals(р3, р4));
// Являются ли они одним объектом в памяти? ЛОЖЬ!
Console.WriteLine ("Указывают ли р3 и р4 на один объект: {0} ", object.ReferenceEquals(р3, р4));
}
Исходный код.Проект ObjectMethods размещен в подкаталоге, соответствующем главе 3.
Типы данных System (и их обозначения в C#)
Вы, наверное, уже догадались, что каждый внутренний тип данных C# – это на самом деле сокращенное обозначение некоторого типа, определенного в пространстве имен System. В табл. 3.11 предлагается список типов данных System, указаны их диапазоны изменения, соответствующие им псевдонимы C# и информация о согласованности типа со спецификациями CLS.
Таблица 3.11.Типы System и их обозначения в C#
Обозначение в C# | Согласованность с CLS | Тип System | Диапазон изменения | Описание |
---|---|---|---|---|
sbyte | Нет | System.SByte | от -128 до 127 | 8-битовое число со знаком |
byte | Да | System.Byte | От 0 до 255 | 8-битовое число без знака |
short | Да | System.Int16 | от -32768 до 32767 | 16-битовое число со знаком |
ushort | Нет | System.UInt16 | от 0 до 65535 | 16-битовое число без знака |
int | Да | System.Int32 | от -2147483648 до 2147483647 | 32-битовое число со знаком |
Uint | Нет | System.UInt32 | от 0 до 4294967295 | 32-битовое число без знака |
long | Да | System.Int64 | от -9223372036854775808 до 9223372036854775807 | 64-битовое число со знаком |
ulong | Нет | System.UInt64 | от 0 до 18446744073709551615 | 64-битовое число без знака |
char | Да | System.Char | от U0000 до Uffff | Отдельный 16-битовый символ Unicode |
float | Да | System.Single | от 1.5×10 -45до 3.4×10 38 | 32-битовое число с плавающим десятичным разделителем |
double | Да | System.Double | от 5.0х10 -324до 1.7х10 308 | 64-битовое число с плавающим десятичным разделителем |
bool | Да | System.Boolean | true или false | Представляет истину или ложь |
decimal | Да | System.Decimal | от 10 0до 10 28 | 96-битовое число со знаком |
string | Да | System.String | Ограничено системной памятью | Представляет набор символов Unicode |
object | Да | System.Object | Любой тип можно сохранить в объектной переменной | Базовый класс всех типов во вселенной .NET |
Замечание.По умолчанию действительный числовой литерал справа от операции присваивания интерпретируется, как double. Поэтому, чтобы инициализировать переменную типа float, используйте суффикс f или F (например 5.3F).
Интересно отметить, что и примитивные типы данных .NET организованы в иерархии классов. Отношения между этими базовыми типами (как и некоторыми другими типами, с которыми мы познакомимся чуть позже) можно представить так, как показано на рис. 3.19.

Рис. 3.19. Иерархия типов System
Как видите, каждый из этих типов, в конечном счете, получается из System.Object. Ввиду того, что такие типы данных, как, например, int являются просто сокращенными обозначениями соответствующего системного типа (в данном случае типа System.Int32), следующий вариант синтаксиса оказывается вполне допустимым.
// Помните! В C# int - это просто сокращение для System. Int32.
Console.WriteLine(12.GetHashCode());
Console.WriteLine(12.Equals(23));
Console.WriteLine(12.ToString());
Console.WriteLine(12); // ToString() вызывается автоматически.
Console.WriteLine(12.GetType().BaseType);
К тому же, поскольку все типы значений имеют конструктор, заданный по умолчанию, можно создавать системные типы с помощью ключевого слова new, в результате чего переменной, к тому же, будет присвоено значение по умолчанию. Хотя использование ключевого слова new при создании типов данных System выглядит несколько "неуклюжим", следующая конструкция оказывается в C# синтаксически правильной.
// Следующие операторы эквивалентны.
bool b1 = new bool(); // b1= false.
bool b2 = false;
Кстати, заметим, что можно создавать системные типы данных, используя абсолютные имена.
// Следующие операторы также семантически эквивалентны.
System.Вoоl b1 = new System.Bool(); // b1 = false.
System.Bool sb2 = false;
Эксперименты с числовыми типами данных
Числовые типы .NET поддерживают свойства MaxValue и МinValue, сообщающие информацию о диапазоне данных, которые может хранить данный тип. Предположим, что мы создали несколько переменных типа System.UInt16 (unsigned short – короткое целое без знака), как показано ниже.
static void Main(string[] args) {
System.Uint16.myUInt16 = 300000;
Console.WriteLine("Максимум для UInt16: {0} ", UInt16. MaxValue);
Console.WriteLine("Минимум для UInt16: {0} ", UInt16. MinValue);
Console.WriteLine("Значение равно: {0} ", myUInt16);
Console.WriteLine("Я есть: {0} ", myUInt16. GetType());
// Теперь для сокращения System.UInt16 (т.e для ushort).
ushort myOtherUInt16 = 12000;
Console.WriteLine("Максимум для UInt16: {0} ", ushort. MaxValue);
Console.WriteLine("Минимум для UInt16: {0} ", ushort. MinValue);
Console.WriteLine("Знaчение равно: {0} ", myOtherUInt16);
Console.WriteLine("Я есть: {0} ", myotherUInt16. GetType());
Console.ReadLine();
}
Вдобавок к свойствам MinValue/MaxValue системные типы могут определять другие полезные члены. Например, тип System.Double позволяет получить значения Epsilon и Infinity.
Console.WriteLine(" -› double.Epsilon: {0}", double. Epsilon);
Console.WriteLine("-› double.РositiveInfinitу: {0} ", double. PositiveInfinity);
Console.WriteLine("-› double.NegativeInfinity: {0}", double. NegativeInfinity);
Console.WriteLine("-› double.MaxValue: {0}", double. MaxValue);
Интервал:
Закладка: