Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp Language Specification.doc
Скачиваний:
13
Добавлен:
26.09.2019
Размер:
4.75 Mб
Скачать

2.5.8Директивы pragma

Препроцессорная директива #pragma используется для указания компилятору необязательных сведений о контексте. Сведения, предоставленные в директиве #pragma, ни в каком случае не изменяют семантику программы.

ПП_pragma: пробелнеобязательно # пробелнеобязательно pragma пробел тело_директивы_pragma ПП_новая_строка

тело_директивы_pragma: тело_предупреждения_директивы_pragma

C# предоставляет директивы #pragma для управления предупреждениями компилятора. В будущие версии языка могут быть включены дополнительные директивы #pragma. Чтобы обеспечить взаимодействие с другими компиляторами C#, компилятор C# корпорации Майкрософт не выдает ошибки компиляции для неизвестных директив #pragma; тем не менее, такие директивы создают предупреждения.

2.5.8.1Директива pragma warning

Директива #pragma warning используется для отключения или восстановления всех или отдельного набора предупреждающих сообщений во время компиляции последующего текста программы.

тело_предупреждения_директивы_pragma: warning пробел действие_предупреждения warning пробел действие_предупреждения пробел список_предупреждений

действие_предупреждения: disable restore

список_предупреждений: десятичные_цифры список_предупреждений пробелнеобязательно , пробелнеобязательно десятичные_цифры

Директива #pragma warning, в которой опущен список предупреждений, влияет на все предупреждения. Директива #pragma warning, в которую включен список предупреждений, влияет только на предупреждения, указанные в этом списке.

Директива #pragma warning disable отключает все предупреждения или заданный набор предупреждений.

Директива #pragma warning restore восстанавливает все предупреждения или заданный набор до состояния, бывшего в начале блока компиляции. Обратите внимание, что если отдельное предупреждение было отключено извне, директива #pragma warning restore (для всех или для конкретного предупреждения) не включит это предупреждение.

В следующем примере показано использование директивы #pragma warning для временного отключения предупреждений, выдаваемых при ссылке на устаревшие члены, с помощью номера предупреждения компилятора Microsoft C#.

using System;

class Program { [Obsolete] static void Foo() {}

static void Main() { #pragma warning disable 612 Foo(); #pragma warning restore 612 } }

3.Основные принципы

3.1Запуск приложения

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

Домен приложения обеспечивает изоляцию приложения путем функционирования в качестве контейнера состояния приложения. Домен приложения функционирует в качестве контейнера и границы типов, заданных в приложении, и используемых библиотек классов. Типы, загружаемые в один домен приложения, отличаются от аналогичных типов, загруженных в другой домен приложения, а экземпляры объектов не используются совместно непосредственным образом между доменами приложений. Например, каждый домен приложения имеет свою копию статических переменных для данных типов, а статический конструктор для типа выполняется не более одного раза на домен приложения. Можно обеспечивать характерные реализации политики или механизмы для создания или удаления доменов приложений.

Запуск приложений происходит, когда среда выполнения вызывает назначенный метод, известный как точка входа приложения. Этот метод точки входа всегда носит имя Main и может иметь одну из следующих сигнатур:

static void Main() {...}

static void Main(string[] args) {...}

static int Main() {...}

static int Main(string[] args) {...}

Как указано выше, точка входа может дополнительно возвратить значение int. Данное возвращаемое значение используется в завершении приложения (§3.2).

Точка входа может дополнительно иметь один формальный параметр. Параметр может иметь любое имя, но тип параметра должен быть string[]. При наличии формального параметра среда выполнения создает и передает аргумент string[], содержащий аргументы командной строки, заданные при запуске приложения. Аргумент string[] никогда не принимает значение null, но может иметь нулевую длину, если не были заданы аргументы командной строки.

Так как C# поддерживает перегрузку методов, класс или структура могут содержать несколько определений какого-либо метода при условии того, что их сигнатуры отличаются. Однако в рамках одной программы класс или структуры не могут содержать более одного метода Main, определение которого позволяет использовать этот метод в качестве точки входа приложения. Другие перегруженные версии Main разрешены с условием наличия более одного параметра или с условием наличия только параметра, тип которого не является типом string[].

Приложение может содержать несколько классов и структур. При этом более одного класса или более одной структуры могут содержать метод Main, определение которого позволяет использовать его в качестве точки входа приложения. В таких случаях для выбора одного из методов Main в качестве точки входа требуется использовать внешний механизм (например, компилятор командной строки).

В C# каждый метод должен быть задан в качестве члена класса или структуры. Как правило, объявленная доступность (§3.5.1) метода определяется модификаторами доступа (§10.3.5), указанными в объявлении, и, аналогичным образом, объявленная доступность типа определяется модификаторами доступа, указанными в объявлении. Чтобы заданный метод заданного типа можно было вызвать, и тип, и член должны быть доступны. Однако точка входа приложения является особым случаем. В частности, среда выполнения может вызвать точку доступа приложения независимо от объявленной доступности в объявлениях вмещающих типов.

Метод точки входа приложения может не находиться в объявлении универсального класса.

Во всех других отношениях методы точки входа функционируют аналогично другим методам.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]