Полное руководство. С# 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] для удаления материала
это простой тесттестпростой теВнимательно проанализируем метод Display(). Выводимая на экран символьнаястрока передается в первом аргументе данного метода. Это обязательный аргумент, адва других аргумента — необязательные. Они задают начальный и конечный индексыдля вывода части символьной строки. Если параметру stop не передается значение, топо умолчанию он принимает значение -1, указывающее на то, что конечной точкой вывода служит конец символьной строки. Если же параметру start не передается значение, то по умолчанию он принимает значение 0. Следовательно, в отсутствие одного изнеобязательных аргументов символьная строка выводится на экран полностью. В противном случае она выводится на экран частично. Эго означает, что если вызвать методDisplay() с одним аргументом (т.е. с выводимой строкой), то символьная строка будетвыведена на экран полностью. Если же вызвать метод Display() с двумя аргументами,то на экран будут выведены символы, начиная с позиции, определяемой аргументомstart, и до самого конца строки. А если вызвать метод Display() с тремя аргументами, то на экран будут выведены символы из строки, начиная с позиции, определяемойаргументом start, и заканчивая позицией, определяемой аргументом stop.Несмотря на всю простоту данного примера, он, тем не менее, демонстрирует значительное преимущество, которое дают необязательные аргументы. Это преимущество заключается в том, что при вызове метода можно указывать только те аргументы,которые требуются. А передавать явным образом устанавливаемые по умолчанию значения не нужно.Прежде чем переходить к следующей теме, остановимся на следующем важном моменте. Необязательные аргументы оказываются весьма эффективным средством лишьв том случае, если они используются правильно. Они предназначены для того, чтобыметод выполнял свои функции эффективно, а пользоваться им можно было бы простои удобно. В этом отношении устанавливаемые по умолчанию значения всех аргументов должны упрощать обычное применение метода. В противном случае необязательные аргументы способны нарушить структуру кода и ввести в заблуждение тех, ктоим пользуется. И наконец, устанавливаемое по умолчанию значение необязательногопараметра не должно наносить никакого вреда. Иными словами, неумышленное использование необязательного аргумента не должно приводить к необратимым, отрицательным последствиям. Так, если забыть указать аргумент при вызове метода, то этоне должно привести к удалению важного файла данных!## Именованные аргументыЕще одним средством, связанным с передачей аргументов методу, является именованный аргумент. Именованные аргументы были внедрены в версии C# 4.0. Как вамдолжно быть уже известно, при передаче аргументов методу порядок их следования,как правило, должен совпадать с тем порядком, в котором параметры определены всамом методе. Иными словами, значение аргумента присваивается параметру по егопозиции в списке аргументов. Данное ограничение призваны преодолеть именованныеаргументы. Именованный аргумент позволяет указать имя того параметра, которомуприсваивается его значение. И в этом случае порядок следования аргументов уже неимеет никакого значения. Таким образом, именованные аргументы в какой-то степенипохожи на упоминавшиеся ранее инициализаторы объектов, хотя и отличаются отних своим синтаксисом.Для указания аргумента по имени служит следующая форма синтаксиса.
имя_параметра : значениеЗдесь имя_параметра обозначает имя того параметра, которому передается значение. Разумеется, имя_параметра должно обозначать имя действительного параметра для вызываемого метода.Ниже приведен простой пример, демонстрирующий применение именованныхаргументов. В этом примере создается метод IsFactor(), возвращающий логическоезначение true, если первый его параметр нацело делится на второй параметр.
// Применить именованные аргументы.using System;
class NamedArgsDemo { // Выяснить, делится ли одно значение нацело на другое. static bool IsFactor(int val, int divisor) { if((val % divisor) == 0) return true; return false; } static void Main() { // Ниже демонстрируются разные способы вызова метода IsFactor(). // Вызов с использованием позиционных аргументов. if(IsFactor(10, 2)) Console.WriteLine("2 - множитель 10."); // Вызов с использованием именованных аргументов. if(IsFactor(val; 10, divisor: 2)) Console.WriteLine("2 - множитель 10."); // Для именованного аргумента порядок указания не имеет значения. if(IsFactor(divisor: 2, val: 10)) Console.WriteLine("2 - множитель 10."); // Применить как позиционный, так и именованный аргумент. if(IsFactor(10, divisor: 2)) Console.WriteLine("2 - множитель 10."); }}Выполнение этого кода дает следующий результат.
2 - множитель 10.2 - множитель 10.2 - множитель 10.2 - множитель 10.Как видите, при каждом вызове метода IsFactor() получается один и тот жерезультат.Помимо демонстрации именованного аргумента в действии, приведенный вышепример кода иллюстрирует две важные особенности именованных аргументов.Во-первых, порядок следования аргументов не имеет никакого значения. Например,два следующих вызова метода IsFactor() совершенно равнозначны.
IsFactor(val :10, divisor: 2)IsFactor(divisor: 2, val: 10)Независимость от порядка следования является главным преимуществом именованных аргументов. Это означает, что запоминать (или даже знать) порядок следования параметров в вызываемом методе совсем не обязательно. Для работы с СОМ-интерфейсами это может быть очень удобно. И во-вторых, позиционные аргументыможно указывать вместе с именованными в одном и том же вызове, как показано вследующем примере.
IsFactor(10, divisor: 2)Следует, однако, иметь в виду, что при совместном использовании именованныхи позиционных аргументов все позиционные аргументы должны быть указаны передлюбыми именованными аргументами.Именованные аргументы можно также применять вместе с необязательными аргументами. Покажем это на примере вызова метода Display(), рассматривавшегося впредыдущем разделе.
// Указать все аргументы по имени.Display(stop: 10, str: "это простой тест", start: 0);// Сделать аргумент start устанавливаемым по умолчанию.Display(stop: 10, str: "это простой тест");// Указать строку по позиции, аргумент stop — по имени by name,// тогда как аргумент start — устанавливаемым по умолчаниюDisplay("это простой тест", stop: 10);Вообще говоря, комбинация именованных и необязательных аргументов позволяетупростить вызовы сложных методов со многими параметрами.Синтаксис именованных аргументов более многословен, чем у обычных позиционных аргументов, и поэтому для вызова методов чаще всего применяются позиционныеаргументы. Но в тех случаях, когда это уместно, именованные аргументы могут бытьиспользованы довольно эффективно.**ПРИМЕЧАНИЕ**Помимо методов, именованные и необязательные аргументы могут применятьсяв конструкторах, индексаторах и делегатах. (Об индексаторах и делегатах речь пойдет далеев этой книге.)## Метод Main()В представленных до сих пор примерах программ использовалась одна форма метода Main(). Но у него имеется также целый ряд перегружаемых форм. Одни из нихмогут служить для возврата значений, другие — для получения аргументов. В этомразделе рассматриваются и те и другие формы.#### Возврат значений из метода Main()По завершении программы имеется возможность возвратить конкретное значениеиз метода Main() вызывающему процессу (зачастую операционной системе). Для этойцели служит следующая форма метода Main().
static int Main()Обратите внимание на то, что в этой форме метода Main() объявляется возвращаемый тип int вместо типа void.Как правило, значение, возвращаемое методом Main(), указывает на нормальноезавершение программы или на аварийное ее завершение из-за сложившихся ненормальных условий выполнения. Условно нулевое возвращаемое значение обычно указывает на нормальное завершение программы, а все остальные значения обозначаюттип возникшей ошибки.### Передача аргументов методу Main()Многие программы принимают так называемые аргументы командной строки,т.е. информацию, которая указывается в командной строке непосредственно послеимени программы при ее запуске на выполнение. В программах на C# такие аргументы передаются затем методу Main(). Для получения аргументов служит одна из приведенных ниже форм метода Main().