Герберт Шилдт - C# 4.0: полное руководство
- Название:C# 4.0: полное руководство
- Автор:
- Жанр:
- Издательство:ООО И.Д. Вильямс
- Год:2011
- Город:Москва -- Киев
- ISBN:978-5-8459-1684-6
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Герберт Шилдт - C# 4.0: полное руководство краткое содержание
В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки.
Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию
C# 4.0: полное руководство - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
AttributeTargets.Field I AttributeTargets.Property
В классе атрибута AttributeUsage
поддерживаются два именованных параметра. Первым из них является параметр AllowMultiple
, принимающий логическое значение. Если это значение истинно, то атрибут может быть применен к одному и тому же элементу неоднократно. Второй именованный параметр, Inherited
, также принимает логическое значение. Если это значение истинно, то атрибут наследуется производными классами, а иначе он не наследуется. По умолчанию параметр AllowMultiple
принимает ложное значение ( false
), а параметр Inherited — истинное значение ( true
).
В классе атрибута AttributeUsage
определяется также доступное только для чтения свойство ValidOn
. Оно возвращает значение типа AttributeTargets
, определяющее типы элементов, к которым можно применять объявляемый атрибут. По умолчанию используется значение AttributeTargets.All
.
Атрибут Conditional
представляет, вероятно, наибольший интерес среди всех встроенных атрибутов. Ведь он позволяет создавать условные методы , которые вызываются только в том случае, если с помощью директивы #define
определен конкретный идентификатор, а иначе метод пропускается. Следовательно, условный метод служит альтернативой условной компиляции по директиве #if
.
Conditional
— это, по существу, еще одно наименование класса System.Diagnostics.ConditionalAttribute
. Для применения атрибута Conditional
в исходный код программы следует включить пространство имен System.Diagnostics
. Рассмотрим применение данного атрибута на следующем примере программы.
// Продемонстрировать применение встроенного атрибута Conditional.
#define TRIAL
using 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
(сокращенное наименование класса System.ObsoleteAttribute
) позволяет пометить элемент программы как устаревший. Ниже приведена общая форма этого атрибута:
[Obsolete ("сообщение") ]
где сообщение выводится при компилировании элемента программы, помеченного как устаревший. Ниже приведен краткий пример применения данного атрибута.
// Продемонстрировать применение атрибута Obsolete,
using System;
class Test {
[Obsolete("Лучше использовать метод MyMeth2.")]
public static int MyMeth(int a, int b) {
return a / b;
}
// Усовершенствованный вариант метода MyMeth.
public static int MyMeth2(int a, int b) {
return b == 0 ? 0 : a / b;
}
static void Main() {
// Для этого кода выводится предупреждение.
Console.WriteLine("4 / 3 равно " + Test.MyMeth(4, 3));
//А для этого кода предупреждение не выводится.
Console.WriteLine("4 / 3 равно " + Test.MyMeth2(4, 3));
}
}
Когда по ходу компиляции программы в методе Main()
встречается вызов метода MyMeth()
, формируется предупреждение, уведомляющее пользователя о том, что ему лучше воспользоваться методом MyMeth2()
.
Ниже приведена вторая форма атрибута Obsolete
:
[Obsolete("сообщение", ошибка)]
где ошибка обозначает логическое значение. Если это значение истинно ( true
), то при использовании устаревшего элемента формируется сообщение об ошибке компиляции вместо предупреждения. Эта форма отличается тем, что программа, содержащая подобную ошибку, не будет скомпилирована в исполняемом виде.
ГЛАВА 18 Обобщения
Эта глава посвящена обобщениям — одному из самых сложных и эффективных средств С#. Любопытно, что обобщения не вошли в первоначальную версию 1.0 и появились лишь в версии 2.0, но теперь они являются неотъемлемой частью языка С#. Не будет преувеличением сказать, что внедрение обобщений коренным образом изменило характер С#. Это нововведение не только означало появление нового элемента синтаксиса данного языка, но и открыло новые возможности для внесения многочисленных изменений и обновлений в библиотеку классов. И хотя после внедрения обобщений прошло уже несколько лет, последствия этого важного шага до сих пор сказываются на развитии C# как языка программирования.
Читать дальшеИнтервал:
Закладка: