Полное руководство. С# 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] для удаления материала
Эта программа дает такой же результат, как и прежде.Дом имеет:2 этажа4 жильца2500 кв. футов общей площади, из них625 приходится на одного человекаУчреждение имеет:3 этажа25 работников4200 кв. футов общей площади, из них168 приходится на одного человека
Рассмотрим основные элементы этой программы, начиная с методаAreaPerPerson(). Первая его строка выглядит следующим образом.public void AreaPerPerson() {
В этой строке объявляется метод, именуемый AreaPerPerson и не имеющий параметров. Для него указывается тип public, а это означает, что его можно вызывать из любойдругой части программы. Метод AreaPerPerson() возвращает пустое значение типаvoid, т.е. он практически ничего не возвращает вызывающей части программы. Анализируемая строка завершается фигурной скобкой, открывающей тело данного метода.
Тело метода AreaPerPerson() состоит всего лишь из одного оператора.Console.WriteLine(" " + Area / Occupants + " приходится на одного человека");
Этот оператор осуществляет вывод величины площади на одного человека, которая получается путем деления общей площади здания (переменной Area) на количество жильцов (переменную Occupants). А поскольку у каждого объекта типаBuilding имеется своя копия переменных Area и Occupants, то при вызове методаAreaPerPerson() в вычислении используются копии этих переменных, принадлежащие вызывающему объекту.
Метод AreaPerPerson() завершается закрывающейся фигурной скобкой. Когдавстречается эта скобка, управление передается обратно вызывающей части программы.Далее проанализируем внимательно следующую строку кода из метода Main().house.AreaPerPerson();
В этой строке вызывается метод AreaPerPerson() для объекта house. Это означает, что метод AreaPerPerson() вызывается относительно объекта, на которыйссылается переменная house, и для этой цели служит оператор-точка. Когда методAreaPerPerson() вызывается, ему передается управление программой. А по его завершении управление передается обратно вызывающей части программы, выполнение которой возобновляется со строки кода, следующей после вызова данного метода.
В данном случае в результате вызова house.AreaPerPerson() выводится площадь на одного человека в здании, определенном в объекте house. Аналогично, в результате вызова office.AreaPerPerson() выводится площадь на одного человекав здании, определенном в объекте office. Таким образом, при каждом вызове методаAreaPerPerson() выводится площадь на одного человека для указанного объекта.
В методе AreaPerPerson() особого внимания заслуживает следующее обстоятельство: обращение к переменным экземпляра Area и Occupants осуществляется непосредственно, т.е. без помощи оператора-точки. Если в методе используется переменнаяэкземпляра, определенная в его классе, то делается это непосредственно, без указанияявной ссылки на объект и без помощи оператора-точки. Понять это нетрудно, если хорошенько подумать. Ведь метод всегда вызывается относительно некоторого объекта егокласса. Как только вызов произойдет, объект становится известным. Поэтому объект ненужно указывать в методе еще раз. В данном случае это означает, что переменные экземпляра Area и Occupants в методе AreaPerPerson() неявно ссылаются на копииэтих же переменных в том объекте, который вызывает метод AreaPerPerson().
ПРИМЕЧАНИЕПопутно следует заметить, что значение переменной Occupants в методеAreaPerPerson() не должно быть равно нулю (это касается всех примеров, приведенныхв данной главе). Если бы значение переменной Occupants оказалось равным нулю, топроизошла бы ошибка из-за деления на нуль. В главе 13, где рассматриваются исключительныеситуации, будет показано, каким образом в C# отслеживаются и обрабатываются ошибки,которые могут возникнуть во время выполнения программы.Возврат из метода
В целом, возврат из метода может произойти при двух условиях. Во-первых, когдавстречается фигурная скобка, закрывающая тело метода, как показывает пример методаAreaPerPerson() из приведенной выше программы. И во-вторых, когда выполняетсяоператор return. Имеются две формы оператора return: одна — для методов типаvoid, т.е. тех методов, которые не возвращают значения, а другая — для методов, возвращающих конкретные значения. Первая форма рассматривается в этом разделе, а в следующем разделе будет пояснено, каким образом значения возвращаются из методов.
Для немедленного завершения метода типа void достаточно воспользоватьсяследующей формой оператора return.return;
Когда выполняется этот оператор, управление возвращается вызывающей частипрограммы, а оставшийся в методе код пропускается. В качестве примера рассмотримследующий метод.public void MyMeth() { int i; for(i=0; i<10; i++) { if(i == 5) return; // прервать на шаге 5 Console.WriteLine(); }}
В данном примере выполняется лишь 5 полноценных шагов цикла for, посколькупри значении 5 переменной i происходит возврат из метода.
В методе допускается наличие нескольких операторов return, особенно если имеются два или более вариантов возврата из него. Например:public void MyMeth() { //... if(done) return; // ... if(error) return;}
В данном примере возврат из метода происходит в двух случаях: если метод завершает свою работу или происходит ошибка. Но пользоваться таким приемом программирования следует очень аккуратно. Ведь из-за слишком большого числа точеквозврата из метода может нарушиться структура кода.
Итак, напомним еще раз: возврат из метода типа void может произойти при двухусловиях: по достижении закрывающей фигурной скобки или при выполнении оператора return.Возврат значения
Методы с возвратом типа void нередко применяются в программировании, темне менее, большинство методов возвращает конкретное значение. В действительностиспособность возвращать значение является одним из самых полезных свойств метода.Возврат значения уже демонстрировался в главе 3 на примере метода Math.Sqrt(),использовавшегося для получения квадратного корня.
Возвращаемые значения используются в программировании с самыми разнымицелями. В одних случаях, как в примере метода Math.Sqrt(), возвращаемое значениесодержит результат некоторого вычисления, в других — оно может просто указыватьна успешное или неудачное завершение метода, а в третьих — содержать код состояния. Но независимо от преследуемой цели использование возвращаемых значенийявляется неотъемлемой частью программирования на С#.
Для возврата значения из метода в вызывающую часть программы служит следующая форма оператора return:return значение;
где значение — это конкретное возвращаемое значение.
Используя возвращаемое значение, можно усовершенствовать рассматривавшийсяранее метод AreaPerPerson(). Вместо того чтобы выводить величину площади наодного человека, лучше возвратить ее из этого метода. Среди прочих преимуществтакого подхода следует особо отметить возможность использовать возвращаемое значение для выполнения других вычислений. Приведенный ниже пример представляетсобой улучшенный вариант рассматривавшейся ранее программы с усовершенствованным методом AreaPerPerson(), возвращающим величину площади на одногочеловека вместо того, чтобы выводить ее.// Возвратить значение из метода AreaPerPerson().using System;class Building { public int Floors; // количество этажей public int Area; // общая площадь здания public int Occupants; // количество жильцов // Возвратить величину площади на одного человека, public int AreaPerPerson() { return Area / Occupants; }}// Использовать значение, возвращаемое методом AreaPerPerson!).class BuildingDemo { static void Main() { Building house = new Building(); Building office = new Building(); int areaPP; // площадь на одного человека // Присвоить значения полям в объекте house. house.Occupants = 4; house.Area = 2500; house.Floors = 2; // Присвоить значения полям в объекте office. office.Occupants = 25; office.Area = 4200; office.Floors = 3; // Получить площадь на одного человека в жилом доме. areaPP = house.AreaPerPerson(); Console.WriteLine("Дом имеет:n " + house.Floors + " этажаn " + house.Occupants + " жильцаn " + house.Area + " кв. футов общей площади, из нихn " + areaPP + " приходится на одного человека"); Console.WriteLine(); // Получить площадь на одного человека в учреждении. areaPP = office.AreaPerPerson(); Console.WriteLine("Учреждение имеет:n " + office.Floors + " этажаn " + office.Occupants + " работниковn " + office.Area + " кв. футов общей площади, из нихn " + areaPP + " приходится на одного человека"); }}