-->

Полное руководство. С# 4.0

На нашем литературном портале можно бесплатно читать книгу Полное руководство. С# 4.0, Шилдт Герберт-- . Жанр: Программирование. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
Полное руководство. С# 4.0
Название: Полное руководство. С# 4.0
Дата добавления: 16 январь 2020
Количество просмотров: 273
Читать онлайн

Полное руководство. С# 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] для удаления материала

Перейти на страницу:

При выполнении этой программы получается следующий результат.Атрибуты в классе UseAttrib: RemarkAttributeПримечание: В этом классе используется атрибут.Дополнение: Это дополнительная информация.

Прежде чем перейти к следующему вопросу, следует особо подчеркнуть, что полеpri_remark нельзя использовать в качестве именованного параметра, поскольку онозакрыто в классе RemarkAttribute. Свойство Remark также нельзя использовать в качестве именованного параметра, потому что оно доступно только для чтения. Напомним, что в качестве именованных параметров могут служить только открытые поля исвойства.

Открытое и доступное только для чтения свойство может использоваться в качествеименованного параметра таким же образом, как и открытое поле. В качестве примераниже показано, как автоматически реализуемое свойство Priority типа int вводитсяв класс RemarkAttribute.// Использовать свойство в качестве именованного параметра атрибута.using System;using System.Reflection;[AttributeUsage(AttributeTargets.All)]public class RemarkAttribute : Attribute { string pri_remark; // базовое поле свойства Remark public string Supplement; // это именованный параметр public RemarkAttribute(string comment) { pri_remark = comment; Supplement = "Отсутствует"; Priority = 1; } public string Remark { get { return pri_remark; } } // Использовать свойство в качестве именованного параметра. public int Priority { get; set; }}[RemarkAttribute("В этом классе используется атрибут.", Supplement = " Это дополнительная информация.", Priority = 10)]class UseAttrib { // ...}class NamedParamDemo { static void Main() { Type t = typeof(UseAttrib); Console.Write("Атрибуты в классе " + t.Name + "); object[] attribs = t.GetCustomAttributes(false); foreach(object о in attribs) { Console.WriteLine(o); } // Извлечь атрибут RemarkAttribute. Type tRemAtt = typeof(RemarkAttribute); RemarkAttribute ra = (RemarkAttribute) Attribute.GetCustomAttribute(t, tRemAtt); Console.Write("Примечание: "); Console.WriteLine(ra.Remark); Console.Write("Дополнение: "); Console.WriteLine(ra.Supplement); Console.WriteLine("Приоритет: " + ra.Priority); }}

Вот к какому результату приводит выполнение этого кода.Атрибуты в классе UseAttrib: RemarkAttributeПримечание: В этом классе используется атрибут.Дополнение: Это дополнительная информация.Приоритет: 10

В данном примере обращает на себя внимание порядок указания атрибутов передклассом UseAttrib, как показано ниже.[RemarkAttribute("В этом классе используется атрибут.", Supplement = " Это дополнительная информация.",Priority = 10)]class UseAttrib { // ...}

Именованные параметры атрибутов Supplement и Priority не обязательно указывать в каком-то определенном порядке. Порядок их указания можно свободно изменить, не меняя сами атрибуты.

И последнее замечание: тип параметра атрибута (как позиционного, так и именованного) должен быть одним из встроенных простых типов, object, Туре, перечислением или одномерным массивом одного из этих типов.Встроенные атрибуты

В C# предусмотрено несколько встроенных атрибутов, но три из них имеют особое значение, поскольку они применяются в самых разных ситуациях. Это атрибутыAttributeUsage, Conditional и Obsolete, рассматриваемые далее по порядку.Атрибут AttributeUsage

Как упоминалось ранее, атрибут AttributeUsage определяет типы элементов, ккоторым может быть применен объявляемый атрибут. AttributeUsage — это, посуществу, еще одно наименование класса System.AttributeUsageAttribute. У негоимеется следующий конструктор:AttributeUsage(AttributeTargets validOn)

где validOn обозначает один или несколько элементов, к которым может быть применен объявляемый атрибут, тогда как AttributeTargets — перечисление, в которомопределяются приведенные ниже значения.АllAssemblyClassConstructorDelegateEnumEventFieldGenericParameterInterfaceMethodModuleParameterPropertyReturnValueStruct

Два этих значения или более можно объединить с помощью логической операцииИЛИ. Например, для указания атрибута, применяемого только к полям и свойствам,используются следующие значения.AttributeTargets.Field | AttributeTargets.Property

В классе атрибута AttributeUsage поддерживаются два именованных параметра.Первым из них является параметр AllowMultiple, принимающий логическое значение. Если это значение истинно, то атрибут может быть применен к одному и тому жеэлементу неоднократно. Второй именованный параметр, Inherited, также принимаетлогическое значение. Если это значение истинно, то атрибут наследуется производными классами, а иначе он не наследуется. По умолчанию параметр AllowMultiple принимает ложное значение (false), а параметр Inherited — истинное значение (true).

В классе атрибута AttributeUsage определяется также доступное только для чтения свойство ValidOn. Оно возвращает значение типа AttributeTargets, определяющее типы элементов, к которым можно применять объявляемый атрибут. По умолчанию используется значение AttributeTargets.All.Атрибут Conditional

Атрибут Conditional представляет, вероятно, наибольший интерес среди всехвстроенных атрибутов. Ведь он позволяет создавать условные методы, которые вызываются только в том случае, если с помощью директивы #define определен конкретныйидентификатор, а иначе метод пропускается. Следовательно, условный метод служитальтернативой условной компиляции по директиве #if.

Conditional — это, по существу, еще одно наименование класса System.Diagnostics.ConditionalAttribute. Для применения атрибута Conditional в исходный код программы следует включить пространство имен System.Diagnostics.

Рассмотрим применение данного атрибута на следующем примере программы.// Продемонстрировать применение встроенного атрибута Conditional.#define TRIALusing System;using System.Diagnostics;class Test { [Conditional("TRIAL")] void Trial() { Console.WriteLine("Пробная версия, не " + "предназначенная для распространения."); } [Conditional("RELEASE")] void Release() { Console.WriteLine("Окончательная рабочая версия."); } static void Main() { Test t = new Test(); t.Trial(); //вызывается только в том случае, если // определен идентификатор TRIAL t.Release(); // вызывается только в том случае, если // определен идентификатор RELEASE }}

Эта программа дает следующий результат.Пробная версия, не предназначенная для распространения.

Рассмотрим эту программу подробнее, чтобы стал понятнее результат ее выполнения. Прежде всего обратите внимание на то, что в этой программе определяетсяидентификатор TRIAL. Затем обратите внимание на определение методов Trial() иRelease(). Каждому из них предшествует атрибут Conditional, общая форма которого приведена ниже:[Conditional идентификатор]

где идентификатор обозначает конкретный идентификатор, определяющий условие выполнение метода. Данный атрибут может применяться только к методам. Еслиидентификатор определен, то метод выполняется, когда он вызывается. Если же идентификатор не определен, то метод не выполняется.

Оба метода, Trial() и Release(), вызываются в методе Main(). Но посколькуопределен один лишь идентификатор TRIAL, то выполняется только метод Trial(),тогда как метод Release() игнорируется. Если же определить идентификаторRELEASE, то метод Release() будет также выполняться. А если удалить определениеидентификатора TRIAL, то метод Trial() выполняться не будет.

Атрибут Conditional можно также применить в классе атрибута, т.е. в классе,наследующем от класса Attribute. Так, если идентификатор определен, то атрибутприменяется, когда он встречается в ходе компиляции. В противном случае он не применяется.

На условные методы накладывается ряд ограничений. Во-первых, они должны возвращать значение типа void, а по существу, ничего не возвращать. Во-вторых, онидолжны быть членами класса или структуры, а не интерфейса. И в-третьих, они немогут предшествовать ключевому слову override.Атрибут Obsolete

Перейти на страницу:
Комментариев (0)
название