День пятьдесят шестой. #ЗаметкиНаПолях

Общие атрибуты

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")]  

static void DoIfAorB() { /*…*/ }

4. Атрибуты Caller Info

Используя атрибуты Caller Info, вы можете получить информацию об объекте, вызвавшем метод: имя свойства или метода, путь к исходному файлу и номер строки в файле. Атрибуты указываются для необязательных параметров метода, которые имеют значения по умолчанию:

using System.Diagnostics;

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



Источник: https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/concepts/attributes/common-attributes