Полное руководство. С# 4.0
Полное руководство. С# 4.0 читать книгу онлайн
В этом полном руководстве по C# 4.0 — языку программирования, разработанному специально для среды .NET, — детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки.Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.
В данной книге вы найдете:- Полное описание средств языка C#- Подробное рассмотрение новых средств в версии C# 4.0, в том числе PLINQ, библиотеку TPL, именованные и необязательные аргументы, динамический тип данных и многое другое- Сотни простых и понятных примеров программ с комментариями.- Самый полный источник информации по C#Благодаря поддержке параллельного языка интегрированных запросов (PLINQ) и библиотеки распараллеливания задач (TPL) версия 4.0 стала новой вехой в программировании на C#, и поэтому Герберт Шилдт, автор лучших книг по программированию, обновил и расширил свое классическое руководство, чтобы охватить в нем эти и другие нововведения. В книге подробно описываются языковые средства C#, даются профессиональные рекомендации и приводятся сотни примеров программ, охватывающих все аспекты программирования на C#, включая синтаксис, ключевые слова и основные библиотеки, не говоря уже о таких новшествах, как PLINQ, TPL, динамический тип данных, а также именованные и необязательные аргументы.Это необходимое каждому программирующему на C# справочное руководство написано простым и доступным языком, благодаря которому Герберт Шилдт стал таким популярным. В книге найдут ответы на насущные вопросы по C# как начинающие, так и опытные программисты.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Преимущество буквальных строковых литералов заключается в том, что они позволяют указать в программе выводимый результат именно так, как он должен выглядетьна экране. Но если выводится несколько строк, то переход на новую строку может нарушить порядок набора исходного текста программы с отступами. Именно по этойпричине в примерах программ, приведенных в этой книге, применение буквальныхстроковых литералов ограничено. Тем не менее они приносят немало замечательныхвыгод во многих случаях, когда требуется форматирование выводимых результатов.
И последнее замечание: не путайте строки с символами. Символьный литерал, например 'X', обозначает одиночную букву типа char. А строка, состоящая из одногосимвола, например "X", по-прежнему остается текстовой строкой.Более подробное рассмотрение переменных
Переменные объявляются с помощью оператора следующей формы:тип имя_переменной;
где тип — это тип данных, хранящихся в переменной; а имя_переменной — это ееимя. Объявить можно переменную любого действительного типа, в том числе и описанных выше типов значений. Важно подчеркнуть, что возможности переменной определяются ее типом. Например, переменную типа bool нельзя использовать для хранения числовых значений с плавающей точкой. Кроме того, тип переменной нельзяизменять в течение срока ее существования. В частности, переменную типа int нельзяпреобразовать в переменную типа char.
Все переменные в C# должны быть объявлены до их применения. Это нужно длятого, чтобы уведомить компилятор о типе данных, хранящихся в переменной, преждечем он попытается правильно скомпилировать любой оператор, в котором используется переменная. Это позволяет также осуществлять строгий контроль типов в С#.В С# определено несколько различных видов переменных. Так, в предыдущих примерах программ использовались переменные, называемые локальными, поскольку ониобъявляются внутри метода.Инициализация переменной
Задать значение переменной можно, в частности, с помощью оператора присваивания, как было не раз продемонстрировано ранее. Кроме того, задать начальное значение переменной можно при ее объявлении. Для этого после имени переменной указывается знак равенства (=) и присваиваемое значение. Ниже приведена общая формаинициализации переменной:тип имя_переменной = значение;
где значение — это конкретное значение, задаваемое при создании переменной. Онодолжно соответствовать указанному типу переменной.Ниже приведены некоторые примеры инициализации переменных.int count = 10; // задать начальное значение 10 переменной count.char ch = 'X'; // инициализировать переменную ch буквенным значением X.float f = 1.2F // переменная f инициализируется числовым значением 1,2.
Если две или более переменные одного и того же типа объявляются списком, разделяемым запятыми, то этим переменным можно задать, например, начальное значение.int а, b =8, с = 19, d; // инициализировать переменные b и с
В данном примере инициализируются только переменные b и с.Динамическая инициализация
В приведенных выше примерах в качестве инициализаторов переменных использовались только константы, но в C# допускается также динамическая инициализацияпеременных с помощью любого выражения, действительного на момент объявленияпеременной. Ниже приведен пример краткой программы для вычисления гипотенузыпрямоугольного треугольника по длине его противоположных сторон.// Продемонстрировать динамическую инициализацию.using System;class DynInit { static void Main() { // Длина сторон прямоугольного треугольника, double s1 = 4.0; double s2 = 5.0; // Инициализировать переменную hypot динамически, double hypot = Math.Sqrt( (s1 * s1) + (s2 * s2) ); Console.Write("Гипотенуза треугольника со сторонами " + s1 + " и " + s2 + " равна "); Console.WriteLine("{0:#.###}.", hypot); }}
Результат выполнения этой программы выглядит следующим образом.Гипотенуза треугольника со сторонами 4 и 5 равна 6.403
В данном примере объявляются три локальные переменные: s1, s2 и hypot. Двеиз них (s1 и s2) инициализируются константами, А третья (hypot) динамически инициализируется вычисляемой длиной гипотенузы. Для такой инициализации используется выражение, указываемое в вызываемом методе Math.Sqrt(). Как пояснялосьвыше, для динамической инициализации пригодно любое выражение, действительноена момент объявления переменной. А поскольку вызов метода Math.Sqrt() (или любого другого библиотечного метода) является действительным на данный момент, тоего можно использовать для инициализации переменной hypot. Следует особо подчеркнуть, что в выражении для инициализации можно использовать любой элемент,действительный на момент самой инициализации переменной, в том числе вызовыметодов, другие переменные или литералы.Неявно типизированные переменные
Как пояснялось выше, все переменные в C# должны быть объявлены. Как правило, при объявлении переменной сначала указывается тип, например int или bool,а затем имя переменной. Но начиная с версии C# 3.0, компилятору предоставляетсявозможность самому определить тип локальной переменной, исходя из значения, которым она инициализируется. Такая переменная называется неявно типизированной.Неявно типизированная переменная объявляется с помощью ключевого слова varи должна быть непременно инициализирована. Для определения типа этой переменной компилятору служит тип ее инициализатора, т.е. значения, которым она инициализируется. Рассмотрим такой пример.var е = 2.7183;
В данном примере переменная е инициализируется литералом с плавающейточкой, который по умолчанию имеет тип double, и поэтому она относится к типуdouble. Если бы переменная е была объявлена следующим образом:var е = 2.7183F;
то она была бы отнесена к типу float.
В приведенном ниже примере программы демонстрируется применение неявнотипизированных переменных. Он представляет собой вариант программы из предыдущего раздела, измененной таким образом, чтобы все переменные были типизированынеявно.// Продемонстрировать применение неявно типизированных переменных.using System;class ImplicitlyTypedVar { static void Main() { // Эти переменные типизированы неявно. Они отнесены // к типу double, поскольку инициализирующие их // выражения сами относятся к типу double. var s1 = 4.0; var s2 = 5.0; // Итак, переменная hypot типизирована неявно и // относится к типу double, поскольку результат, // возвращаемый методом Sqrt(), имеет тип double. var hypot = Math.Sqrt( (s1 * s1) + (s2 * s2) ); Console.Write("Гипотенуза треугольника со сторонами " + s1 + " by " + s2 + " равна "); Console.WriteLine("{0:#.###}.", hypot); // Следующий оператор не может быть скомпилирован, // поскольку переменная s1 имеет тип double и // ей нельзя присвоить десятичное значение. // s1 = 12.2М; // Ошибка! }}
Результат выполнения этой программы оказывается таким же, как и прежде.
Важно подчеркнуть, что неявно типизированная переменная по-прежнему остается строго типизированной. Обратите внимание на следующую закомментированнуюстроку из приведенной выше программы.// s1 = 12.2М; // Ошибка!
Эта операция присваивания недействительна, поскольку переменная s1 относитсяк типу double. Следовательно, ей нельзя присвоить десятичное значение. Единственное отличие неявно типизированной переменной от обычной, явно типизированнойпеременной, — в способе определения ее типа. Как только этот тип будет определен,он закрепляется за переменной до конца ее существования. Это, в частности, означает,что тип переменной s1 не может быть изменен по ходу выполнения программы.
Неявно типизированные переменные внедрены в C# не для того, чтобы заменитьсобой обычные объявления переменных. Напротив, неявно типизированные переменные предназначены для особых случаев, и самый примечательный из них имеет отношение к языку интегрированных запросов (LINQ), подробно рассматриваемому в главе
Таким образом, большинство объявлений переменных должно и впредь оставатьсяявно типизированными, поскольку они облегчают чтение и понимание исходного текста программы.