День пятьдесят шестой. #ЗаметкиНаПолях
Общие атрибуты
1. Глобальные атрибуты
Применяются к сборке или модулю в целом. Например,
Различают три категории атрибутов сборки:
- атрибуты идентификации сборки: обязательные атрибуты для сборки (
- информационные атрибуты: дополнительная информация о сборке (
- атрибуты манифеста сборки (
2. Атрибут Obsolete
Обозначает элементы программы, не рекомендуемые для дальнейшего использования. Выдаёт предупреждение компилятора или ошибку компиляции в зависимости от настройки:
3. Условный атрибут
Условный атрибут ставит выполнение метода в зависимость от идентификатора препроцессора, определяемого в коде следующим образом:
Условные атрибуты можно совмещать. Тогда метод будет исполнен, если хотя бы один из идентификаторов определён:
Используя атрибуты Caller Info, вы можете получить информацию об объекте, вызвавшем метод: имя свойства или метода, путь к исходному файлу и номер строки в файле. Атрибуты указываются для необязательных параметров метода, которые имеют значения по умолчанию:
Общие атрибуты
1. Глобальные атрибуты
Применяются к сборке или модулю в целом. Например,
AssemblyVersion
используется для указания версии сборки:[assembly: AssemblyVersion("1.0.0.0")]В коде глобальные атрибуты располагаются после директив высшего уровня и перед любыми объявлениями классов, модулей или пространств имён. В проектах C# они помещаются в файл
AssemblyInfo.cs
.Различают три категории атрибутов сборки:
- атрибуты идентификации сборки: обязательные атрибуты для сборки (
AssemblyName
, AssemblyVersion
, AssemblyCulture
, AssemblyFlags
),- информационные атрибуты: дополнительная информация о сборке (
AssemblyProduct
, AssemblyTrademark
, AssemblyInformationalVersion
, AssemblyCompany
, AssemblyCopyright
, AssemblyFileVersion
, CLSCompliant
)- атрибуты манифеста сборки (
AssemblyTitle
, AssemblyDescription
, AssemblyConfiguration
, AssemblyDefaultAlias
).2. Атрибут Obsolete
Обозначает элементы программы, не рекомендуемые для дальнейшего использования. Выдаёт предупреждение компилятора или ошибку компиляции в зависимости от настройки:
[System.Obsolete("use class B")]В этом примере использование класса
class A
{
public void Method() { }
}
class B
{
[System.Obsolete("use NewMethod", true)]
public void OldMethod() { }
public void NewMethod() { }
}
A
приведёт к предупреждению компилятора, а использование метода OldMethod
класса B
к ошибке, т.к. второй параметр конструктора атрибута (error
) установлен в true
. Первый строковый параметр (message
) используется как сообщение компилятора. Он не обязательный, но его рекомендуется задавать.3. Условный атрибут
Условный атрибут ставит выполнение метода в зависимость от идентификатора препроцессора, определяемого в коде следующим образом:
#define CONDITION1Чаще всего он используется с идентификатором
DEBUG
, для включения функций трассировки и ведения журнала для отладочных сборок (но не в релизе):[Conditional("DEBUG")]Атрибут определяет, вызывается или нет метод, помеченный им. Если идентификатор не определён, метод не вызывается. Условный метод должен быть определён в классе или структуре и не должен возвращать значений.
static void DebugMethod() { /*…*/ }
Условные атрибуты можно совмещать. Тогда метод будет исполнен, если хотя бы один из идентификаторов определён:
[Conditional("A"), Conditional("B")]4. Атрибуты Caller Info
static void DoIfAorB() { /*…*/ }
Используя атрибуты Caller Info, вы можете получить информацию об объекте, вызвавшем метод: имя свойства или метода, путь к исходному файлу и номер строки в файле. Атрибуты указываются для необязательных параметров метода, которые имеют значения по умолчанию:
using System.Diagnostics;Источник: https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/concepts/attributes/common-attributes
using System.Runtime.CompilerServices;
public void DoProcessing()
{
TraceMessage("Something happened.");
}
public void TraceMessage(string message,
[CallerMemberName] string memberName = "",
[CallerFilePath] string sourceFilePath = "",
[CallerLineNumber] int sourceLineNumber = 0)
{
Trace.WriteLine("message: " + message);
Trace.WriteLine("member name: " + memberName);
Trace.WriteLine("source file path: " + sourceFilePath);
Trace.WriteLine("source line number: " + sourceLineNumber);
}
// Пример вывода:
// message: Something happened.
// member name: DoProcessing
// source file path: c:\Visual Studio Projects\CallerInfoCS\CallerInfoCS\Form1.cs
// source line number: 31