Obsolete 1 страница
Атрибут Obsolete используется для пометки типов и членов типов, которые не следует больше использовать. namespace System public ObsoleteAttribute(string message) {...} public ObsoleteAttribute(string message, bool error) {...} public string Message { get {...} } public bool IsError { get {...} } Если программа использует тип или член, к которому добавлен атрибут Obsolete, компилятор выдает предупреждение или ошибку. А именно, компилятор выдает предупреждение, если не предоставлен параметр ошибки или если параметр ошибки имеет значение false. Компилятор выдает сообщение об ошибке, если указан параметр ошибки со значением true. В примере [Obsolete("This class is obsolete; use class B instead")] class B class Test к классу A добавляется атрибут Obsolete. Каждое использование A в Main приводит к выдаче предупреждения, в состав которого включено сообщение «Этот класс устаревший; используйте вместо него класс B». 17.5 Атрибуты для взаимодействия Примечание. Этот раздел применим только для реализации Microsoft.NET языка C#. COM и Win32 Исполняющая среда.NET предоставляет большое число атрибутов, позволяющих программам C# взаимодействовать с компонентами, написанными с использованием модели COM и библиотек DLL Win32. Например, атрибут DllImport можно использовать для метода static extern, чтобы указать, что реализацию метода следует искать в библиотеке DLL Win32. Эти атрибуты находятся в пространстве имен System.Runtime.InteropServices, а подробную документацию на эти атрибуты можно найти в документации исполняющей среды.NET. NET IndexerName Индексаторы реализованы в.NET с помощью индексированных свойств и имеют имя в метаданных.NET. Если атрибут IndexerName отсутствует для индексатора, по умолчанию используется имя Item. Атрибут IndexerName позволяет разработчику переопределить это значение по умолчанию и задать другое имя. namespace System.Runtime.CompilerServices.CSharp public string Value { get {...} }
18. Небезопасный код; Базовый язык C#, как определено в предыдущих главах, заметно отличается от C и C++ тем, что в нем не используются указатели в качестве типа данных. Вместо этого C# предоставляет ссылки и возможность создавать объекты, управляемые сборщиком мусора. Эта разработка в сочетании с другими особенностями делает язык C# гораздо более безопасным, чем C и C++. В базовом языке C# просто невозможно иметь неинициализированную переменную, «висящий» указатель или выражение, индексирующее массив за пределами его границ. Таким образом устраняются целые категории ошибок, регулярно досаждающих в программах на C и C++. Хотя практически у каждой конструкции с типом указателя в C или C++ имеется аналог ссылочного типа в C#, тем не менее в некоторых ситуациях доступ к типам указателей становится необходимостью. Например, согласование с операционной системой, доступ к устройству, сопоставленному памяти, или реализация критического по времени алгоритма могут оказаться неосуществимыми без доступа к указателям. Для удовлетворения этой потребности C# предоставляет возможность писать небезопасный код. В небезопасном коде можно объявлять и производить операции с указателями, выполнять преобразования между указателями и целыми типами, получать адреса переменных и так далее. В некотором смысле написание небезопасного кода очень похоже на написание кода C внутри программы на C#. Небезопасный код в действительности является «безопасной» возможностью с точки зрения как разработчиков, так и пользователей. Небезопасный код должен быть явно помечен модификатором unsafe, так что разработчик не может случайно использовать небезопасные возможности, а механизм выполнения обеспечивает невозможность выполнения небезопасного кода в ненадежной среде. 18.1 Небезопасные контексты Небезопасные возможности C# доступны только в небезопасных контекстах;. Небезопасный контекст вводится включением модификатора unsafe в объявление типа или члена, или использованием небезопасного_оператора;: · объявление класса, структуры, интерфейса или делегата может включать модификатор unsafe, в этом случае все текстовое пространство этого объявления (включая тело класса, структуры или интерфейса) считается небезопасным контекстом; · объявление поля, метода, свойства, события, индексатора, оператора, конструктора экземпляров, деструктора или статического конструктора может включать модификатор unsafe, в этом случае все текстовое пространство этого объявления члена считается небезопасным контекстом; · небезопасный_оператор; дает возможность использовать небезопасный контекст внутри блока;. Все текстовое пространство соответствующего блока; считается небезопасным контекстом. Соответствующие грамматические расширения показаны ниже. Многоточиями (...) для краткости представлены порождения, описанные в предыдущих главах. модификатор_класса: модификатор_структуры: модификатор_интерфейса: модификатор_делегата: модификатор_поля: модификатор_метода: модификатор_свойства: модификатор_события: модификатор_индекса: модификатор_оператора: модификатор_конструктора: объявление_деструктора:
|